前文:
Python-openpyxl教程1 - openpyxl簡(jiǎn)介
Python-openpyxl教程2 - 簡(jiǎn)單使用
Python-openpyxl教程3 - 讀寫性能
Python-openpyxl教程4 - 優(yōu)化模式
Python-openpyxl教程5 - 與Pandas交互
圖表類型
openpyxl可以使用以下圖表:
- 面積圖
- 二維面積圖
- 三維面積圖
- 條形圖和柱狀圖
- 垂直尿这,水平和堆疊條形圖
- 三維條形圖
- 氣泡圖
- 折線圖
- 折線圖
- 三維折線圖
- 散點(diǎn)圖
- 餅圖
- 餅圖
- 投影餅圖
- 三維餅圖
- 漸變餅圖
- 甜甜圈圖
- 雷達(dá)圖
- 股票圖
- 曲面圖
創(chuàng)建圖表
圖表至少由一系列一個(gè)或多個(gè)數(shù)據(jù)點(diǎn)組成簇抵。系列本身對(duì)單元格范圍的引用組成。
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
wb = Workbook()
ws = wb.active
for i in range(10):
ws.append([i]) # 添加一行值
# Reference:標(biāo)準(zhǔn)化單元格范圍引用 Normalise cell range references
values = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) # 引用ws工作表范圍[A1:A10]
chart = BarChart() # 新建一個(gè)條形圖對(duì)象
chart.add_data(values) # 給單個(gè)過程添加一系列值"values",默認(rèn)是將每一列作為一系列值
ws.add_chart(chart, 'E15') # 將條形圖添加到E15單元格位置
wb.save("SampleChart.xlsx") # 保存為SampleChart.xlsx表格
默認(rèn)情況下圖表的左上角固定在單元格E15上射众,大小為15x7.5厘米(大約5列乘14行)碟摆。可以通過設(shè)置圖標(biāo)的anchor叨橱,width和height屬性來更改此設(shè)置典蜕。實(shí)際大小將取決于操作系統(tǒng)和設(shè)備。
其他錨點(diǎn)是可能的罗洗。請(qǐng)參考openpyxl.drawing.spreadsheet_drawing
來獲取更多信息愉舔。
面積圖
面積圖類似于折線圖,不同之處在于填充了繪制線下方的區(qū)域伙菜。通過將分組設(shè)置為"標(biāo)準(zhǔn)"轩缤,"堆疊"或"百分比堆疊",可以使用不同的變體贩绕。默認(rèn)為"標(biāo)準(zhǔn)"火的。
from openpyxl import Workbook
from openpyxl.chart import AreaChart, Reference
wb = Workbook()
ws = wb.active
rows = [
['Number', 'Batch 1', 'Batch 2'],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
# 添加數(shù)據(jù)
for row in rows:
ws.append(row)
chart = AreaChart() # 創(chuàng)建一個(gè)面積圖對(duì)象
chart.title = 'Area Chart' # 面積圖對(duì)象標(biāo)題賦值
chart.style = 13 # 面積圖對(duì)象風(fēng)格
chart.x_axis.title = 'Test' # x軸標(biāo)題
chart.y_axis.title = 'Percentage' # y軸標(biāo)題
cats = Reference(ws, min_col=1, min_row=1, max_row=7) # 創(chuàng)建一個(gè)名為cats的引用對(duì)象
# cats = Reference(ws, min_col=1, min_row=2, max_row=7)
data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=7) # 創(chuàng)建一個(gè)名為data的引用對(duì)象
chart.add_data(data, titles_from_data=True) # 面積圖添加數(shù)據(jù)
chart.set_categories(cats) # 面積圖設(shè)置類別(便于理解類別的作用,可以將cats注釋行給取消注釋)
ws.add_chart(chart, 'A10') # 將面積圖添加并且固定在A10單元格位置
wb.save('SampleArea.xlsx') # 保存為"SampleArea.xlsx"表格
您還可以創(chuàng)建三維面積圖
from openpyxl import Workbook
from openpyxl.chart import AreaChart3D, Reference
wb = Workbook()
ws = wb.active
rows = [
['Number', 'Batch 1', 'Batch 2'],
[2, 30, 40],
[3, 25, 40],
[4, 30, 50],
[5, 10, 30],
[6, 5, 25],
[7, 10, 50],
]
# 添加數(shù)據(jù)
for row in rows:
ws.append(row)
chart = AreaChart3D() # 創(chuàng)建一個(gè)面積圖對(duì)象
chart.title = 'Area Chart' # 面積圖對(duì)象標(biāo)題賦值
chart.style = 13 # 面積圖對(duì)象風(fēng)格
chart.x_axis.title = 'Test' # x軸標(biāo)題
chart.y_axis.title = 'Percentage' # y軸標(biāo)題
chart.legend = None
cats = Reference(ws, min_col=1, min_row=1, max_row=7) # 創(chuàng)建一個(gè)名為cats的引用對(duì)象
# cats = Reference(ws, min_col=1, min_row=2, max_row=7)
data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=7) # 創(chuàng)建一個(gè)名為data的引用對(duì)象
chart.add_data(data, titles_from_data=True) # 面積圖添加數(shù)據(jù)
chart.set_categories(cats) # 面積圖設(shè)置類別(便于理解類別的作用淑倾,可以將cats注釋行給取消注釋)
ws.add_chart(chart, 'A10') # 將面積圖添加并且固定在A10單元格位置
wb.save('SampleArea3D.xlsx') # 保存為"SampleArea.xlsx"表格
這將生成一個(gè)簡(jiǎn)單的三維面積圖馏鹤,其中第三個(gè)軸可用于替換圖例:
實(shí)測(cè)使用WPS不支持該方法創(chuàng)建三維面積圖
條形圖和柱形圖
在條形圖中,值被繪制為水平條或垂直列
以下設(shè)置會(huì)影響不同的圖表類型湃累。 |
通過分別將類型設(shè)置為col或bar, 在垂直和水平條形圖之間切換碍讨。 |
使用堆疊圖表時(shí)治力,重疊部分需要設(shè)置為100。 |
如果條是水平的垄开,則x和y軸將反轉(zhuǎn)琴许。 |
from copy import deepcopy
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
wb = Workbook(write_only=True)
ws = wb.create_sheet()
rows = [
('Number', 'Batch 1', 'Batch 2'),
(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() # 新建一個(gè)條形圖
chart1.type = 'col' # 暫不知道該參數(shù)的解釋税肪,從實(shí)際表現(xiàn)上來看type決定了以垂直還是水平條形圖來顯示溉躲。['col':'垂直', 'bar':'水平']
chart1.style = 10 # 圖表的風(fēng)格設(shè)置為10
chart1.title = 'Bar Chart' # 設(shè)置圖表的標(biāo)題
chart1.y_axis.title = 'Test number' # 設(shè)置圖標(biāo)的x軸標(biāo)簽
chart1.x_axis.title = 'Sample length(mm)' # 設(shè)置圖表的y軸標(biāo)簽
data = Reference(ws, min_col=2, min_row=1, max_row=7, max_col=3) # 創(chuàng)建一個(gè)Reference對(duì)象[B1:C7]
cats = Reference(ws, min_col=1, min_row=2, max_row=7) # 創(chuàng)建一個(gè)Reference對(duì)象[A2:A7]
chart1.add_data(data, titles_from_data=True) # 添加數(shù)據(jù),并且從數(shù)據(jù)中獲取標(biāo)題
chart1.set_categories(cats) # 設(shè)置類型為cats.
chart1.shape = 4 # 暫未從表現(xiàn)中看出有什么實(shí)際作用
ws.add_chart(chart1, 'A10') # 垂直條形圖
chart2 = deepcopy(chart1) # 重新創(chuàng)建一個(gè)圖表深拷貝chart1
chart2.style = 11
chart2.type = 'bar'
chart2.title = 'Horizontal Bar Chart'
ws.add_chart(chart2, 'I10') # 水平條形圖
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, 'I27') # 堆疊水平百分比條形圖
wb.save('SampleBar2.xlsx')
這將產(chǎn)生四個(gè)圖表益兄,說明各種可能性锻梳。
#####
您還可以創(chuàng)建三維條形圖
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, "E5")
wb.save("bar3d.xlsx")
這將生成一個(gè)簡(jiǎn)單的三維條形圖。
實(shí)測(cè)使用WPS不支持該方法創(chuàng)建三維條形圖
note:有興趣的小伙伴可以幫忙看下在 office下的現(xiàn)象
來源: https://openpyxl.readthedocs.io/en/stable/charts/introduction.html