Python對於Excel的一些基本繪製圖示操作,讓你日常工作更加輕鬆

嬌兮心有之發表於2018-12-15

前言

在Python中,我們可以利用第三方庫來方便地操作Excel檔案。這裡使用python-excel.org中提供的openpyxl庫,用於讀寫Excel 2007及以上版本的Excel檔案。可以讓我們日常工作中對於Excel方面的處理更加的方便

本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並不斷的成長,掌握Python核心技術,才是掌握真正的價值所在。

安裝

使用pip安裝工具來安裝openpyxl,安裝需要開啟系統命令列(win +R)輸入CMD

pip install openpyxl

即可安裝。

初識操作程式碼

下面的程式碼用於建立Excel工作簿並在工作表中寫入資料:

Python對於Excel的一些基本繪製圖示操作,讓你日常工作更加輕鬆

 

執行程式碼實現效果:

Python對於Excel的一些基本繪製圖示操作,讓你日常工作更加輕鬆

 

垂直、水平和堆積條形圖

注意,下列設定影響不同的圖表型別:

  • 通過設定type為col或bar在垂直和水平條形圖之間切換
  • 當使用堆積圖時,overlap需要被設定成100
  • 如果條形是水平的,那麼x和y軸相反

下面的程式碼用於建立不同型式的條形圖:

from openpyxl import Workbook
from openpyxl.chart import BarChart, Series, Reference
 
wb= Workbook(write_only=True)
ws= wb.create_sheet()
 
rows= [
 ('Number','Batch 1', 'Batch2'),
 (2, 10, 30),
 (3, 40, 60),
 (4, 50, 70),
 (5, 20, 10),
 (6, 10, 40),
 (7, 50, 30),
]
 
for row in rows:
 ws.append(row)
 
chart1= BarChart()
chart1.type= "col"
chart1.style= 10
chart1.title= "Bar Chart"
chart1.y_axis.title= 'Test number'
chart1.x_axis.title= 'Sample length (mm)'
 
data= Reference(ws, min_col=2, min_row=1, max_row=7, max_col=3)
cats= Reference(ws, min_col=1, min_row=2, max_row=7)
chart1.add_data(data,titles_from_data=True)
chart1.set_categories(cats)
chart1.shape= 4
ws.add_chart(chart1,"A10")
 
from copy import deepcopy
 
chart2= deepcopy(chart1)
chart2.style= 11
chart2.type= "bar"
chart2.title= "Horizontal Bar Chart"
 
ws.add_chart(chart2,"G10")
 
chart3= deepcopy(chart1)
chart3.type= "col"
chart3.style= 12
chart3.grouping= "stacked"
chart3.overlap= 100
chart3.title= 'Stacked Chart'
 
ws.add_chart(chart3,"A27")
 
chart4= deepcopy(chart1)
chart4.type= "bar"
chart4.style= 13
chart4.grouping= "percentStacked"
chart4.overlap= 100
chart4.title= 'Percent Stacked Chart'
 
ws.add_chart(chart4,"G27")
 
wb.save("bar.xlsx")

執行效果:

Python對於Excel的一些基本繪製圖示操作,讓你日常工作更加輕鬆

 

三維條形圖

也可以建立三維條形圖,程式碼如下:

from openpyxl import Workbook
from openpyxl.chart import (
 Reference,
 Series,
 BarChart3D,
)
 
wb= Workbook()
ws= wb.active
 
rows= [
 (None, 2013, 2014),
 ("Apples",5, 4),
 ("Oranges",6, 2),
 ("Pears",8, 3)
]
 
for row in rows:
 ws.append(row)
 
data= Reference(ws, min_col=2, min_row=1, max_col=3, max_row=4)
titles= Reference(ws, min_col=1, min_row=2, max_row=4)
chart= BarChart3D()
chart.title= "3D Bar Chart"
chart.add_data(data=data,titles_from_data=True)
chart.set_categories(titles)
 
ws.add_chart(chart,"A6")
wb.save("bard.xlsx")

效果圖:

Python對於Excel的一些基本繪製圖示操作,讓你日常工作更加輕鬆

 

股價圖

不同形式股價圖的特定格式選項:

  • 高-低-收盤形式股價圖實際上是一個不帶線條的折線圖,其標記設定為XYZ,並將hiLoLines設定為True。
  • 開盤-高-低-收盤形式股價圖就像一個帶有標記的高-低-收盤股價圖,每個資料點設定為XYZ和upDownLines。

可以通過組合股價圖和條形圖來新增表示成交量的條形。

基本的程式碼如下:

from datetime import date
from openpyxl import Workbook
 
from openpyxl.chart import (
BarChart,
StockChart,
 Reference,
 Series,
)
 
from openpyxl.chart.axis import DateAxis,ChartLines
from openpyxl.chart.updown_bars import UpDownBars
 
wb= Workbook()
ws= wb.active
 
rows= [
 ['日期','成交量','開盤','高','低','收盤'],
 ['2018-11-10',20000,26.20,27.20,23.49,25.45,],
 ['2018-11-11',10000,25.45,25.03,19.55,23.05,],
 ['2018-11-12',15000,23.05,24.46,20.03,22.42,],
 ['2018-11-13',2000,22.42,23.97,20.07,21.90,],
 ['2018-11-14',12000,21.9,23.65,19.50,21.51,],
]
 
for row in rows:
	ws.append(row)
 
# 高-低-收盤
c1= StockChart()
labels= Reference(ws, min_col=1, min_row=2, max_row=6)
data= Reference(ws, min_col=4, max_col=6, min_row=1, max_row=6)
c1.add_data(data,titles_from_data=True)
c1.set_categories(labels)
for s in c1.series:
	s.graphicalProperties.line.noFill= True
# 標記收盤
	s.marker.symbol= "dot"
	s.marker.size= 5
	c1.title= "高-低-收盤"
	c1.hiLowLines= ChartLines()
 
from openpyxl.chart.data_source import NumData, NumVal
pts= [NumVal(idx=i) for i in range(len(data)- 1)]
cache= NumData(pt=pts)
c1.series[-1].val.numRef.numCache=cache
 
ws.add_chart(c1, "A10")
 
# 開盤-高-低-收盤
c2= StockChart()
data= Reference(ws, min_col=3, max_col=6, min_row=1, max_row=6)
c2.add_data(data,titles_from_data=True)
c2.set_categories(labels)
for s in c2.series:
	s.graphicalProperties.line.noFill= True
	c2.hiLowLines= ChartLines()
	c2.upDownBars= UpDownBars()
	c2.title= "開盤-高-低-收盤"
 
c2.series[-1].val.numRef.numCache= cache
 
ws.add_chart(c2,"G10")
 
# 建立條形圖代表成交量
bar= BarChart()
data= Reference(ws, min_col=2, min_row=1, max_row=6)
bar.add_data(data,titles_from_data=True)
bar.set_categories(labels)
 
from copy import deepcopy
 
# 成交量-高-低-收盤價
b1= deepcopy(bar)
c3= deepcopy(c1)
c3.y_axis.majorGridlines=None
c3.y_axis.title= "價格"
b1.y_axis.axId= 20
b1.z_axis= c3.y_axis
b1.y_axis.crosses= "max"
b1+= c3
 
c3.title= "高低收盤成交量"
 
ws.add_chart(b1,"A27")
 
# 成交量-開盤-高-低-收盤
b2= deepcopy(bar)
c4= deepcopy(c2)
c4.y_axis.majorGridlines= None
c4.y_axis.title= "價格"
b2.y_axis.axId= 20
b2.z_axis= c4.y_axis
b2.y_axis.crosses= "max"
b2+= c4
 
ws.add_chart(b2,"G27")
wb.save("stock.xlsx")

實現效果圖:

Python對於Excel的一些基本繪製圖示操作,讓你日常工作更加輕鬆

 

氣泡圖

氣泡圖與散點圖相似,但使用第三維來決定氣泡的大小,可以包括多個系列。

下面的程式碼建立氣泡圖:

from openpyxl import Workbook
from openpyxl.chart import Series, Reference, BubbleChart
 
wb= Workbook()
ws= wb.active
 
rows= [
 ("Numberof Products", "Sales in USD","Market share"),
 (14, 12200, 15),
 (20, 60000, 33),
 (18, 24400, 10),
 (22, 32000, 42),
 (),
 (12, 8200, 18),
 (15, 50000, 30),
 (19, 22400, 15),
 (25, 25000, 50),
]
 
for row in rows:
 ws.append(row)
 
chart= BubbleChart()
chart.style= 18 #使用預設的樣式
 
# 新增第一個資料系列
xvalues= Reference(ws, min_col=1, min_row=2, max_row=5)
yvalues= Reference(ws, min_col=2, min_row=2, max_row=5)
size= Reference(ws, min_col=3, min_row=2, max_row=5)
series= Series(values=yvalues, xvalues=xvalues, zvalues=size, title="2013")
chart.series.append(series)
 
# 新增第二個資料系列
xvalues= Reference(ws, min_col=1, min_row=7, max_row=10)
yvalues= Reference(ws, min_col=2, min_row=7, max_row=10)
size= Reference(ws, min_col=3, min_row=7, max_row=10)
series= Series(values=yvalues, xvalues=xvalues, zvalues=size, title="2014")
chart.series.append(series)
 
# 在以單元格A12開始的單元格中放置圖表
ws.add_chart(chart,"A12")
wb.save("bubble.xlsx")

效果圖:

Python對於Excel的一些基本繪製圖示操作,讓你日常工作更加輕鬆

 

以上就是Python關於Excel的一些基本操作,當然了,Python對於Excel方面的操作肯定不止於此。未完待續.................

相關文章