📌  相关文章
📜  Python | 使用openpyxl模块在Excel工作表中绘制图表 3

📅  最后修改于: 2020-04-11 06:48:50             🧑  作者: Mango

先决条件:使用openpyxl模块– 1 | 在Excel工作表中绘制图表– 2
Openpyxl是一个Python库,使用它可以对excel文件执行多项操作,例如读取,编写,算术运算和绘制图形。
图表由至少一个系列的一个或多个数据点组成。系列本身由对单元格范围的引用组成。让我们看看如何使用openpyxl在Excel工作表上绘制Doughnot,Radar,Surface,3D Surface Chart。

为了在Excel工作表上绘制图表,首先,创建特定图表类(即SurfaceChart,RadarChart等)的图表对象。创建图表对象后,在其中插入数据,最后,将该图表对象添加到图纸对象中。让我们看看如何使用实时数据绘制不同的图表。

代码1:绘制甜甜圈图
甜甜圈图与饼图相似,不同之处在于它们使用环而不是圆。他们还可以绘制多个系列的数据作为同心环。要在Excel工作表上绘制甜甜圈图,请使用openpyxl.chart子模块中的DoughnutChart类。

# 从openpyxl导入工作簿
from openpyxl import Workbook
# 从openpyxl.chart sub_module导入DoughnutChart,Reference .
from openpyxl.chart import DoughnutChart, Reference
# 从openpyxl.chart.series类导入DataPoint
from openpyxl.chart.series import DataPoint
# 调用openpyxl的Workbook()函数以创建一个新的空白Workbook对象
wb = Workbook()
# 从active属性获取工作簿活动表.
ws = wb.active
# 给出的数据
data = [
    ['Pie', 2014],
    ['Plain', 40],
    ['Jam', 2],
    ['Lime', 20],
    ['Chocolate', 30],
]
# 将每一行的内容分别写入活动工作表的第一和第二列 .
for row in data:
    ws.append(row)
# 创建DoughnutChart类的对象
chart = DoughnutChart()
# 创建绘图数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 5)
data = Reference(ws, min_col = 2, min_row = 1, max_row = 5)
# 将数据添加到“甜甜圈图"对象
chart.add_data(data, titles_from_data = True)
# 在图表对象中设置标签
chart.set_categories(labels)
# 设置图表标题
chart.title = "Doughnuts Chart"
# 设置图表样式
chart.style = 26
# 将图表添加到工作表中#图表的左上角锚定到单元格E1 .
ws.add_chart(chart, "E1")
# 保存文件
wb.save("doughnut.xlsx")

输出:


代码2:绘制雷达图
可以在雷达图中绘制工作表中按列或行排列的数据。雷达图比较多个数据系列的合计值。它实际上是面积图在圆形x轴上的投影。要在Excel工作表上绘制Radar图表,请使用openpyxl.chart子模块中的RadarChart类。

# 从openpyxl导入工作簿
from openpyxl import Workbook
# 从openpyxl.chart sub_module导入DoughnutChart,Reference . .
from openpyxl.chart import RadarChart, Reference
# 调用openpyxl的Workbook()函数以创建一个新的空白Workbook对象
wb = Workbook()
# 从active属性获取工作簿活动表.
ws = wb.active
# 给出的数据
data = [
    ['Month', "Bulbs", "Seeds", "Flowers", "Trees & shrubs"],
    ['Jan', 0, 2500, 500, 0, ],
    ['Feb', 0, 5500, 750, 1500],
    ['Mar', 0, 9000, 1500, 2500],
    ['Apr', 0, 6500, 2000, 4000],
    ['May', 0, 3500, 5500, 3500],
    ['Jun', 0, 0, 7500, 1500],
    ['Jul', 0, 0, 8500, 800],
    ['Aug', 1500, 0, 7000, 550],
    ['Sep', 5000, 0, 3500, 2500],
    ['Oct', 8500, 0, 2500, 6000],
    ['Nov', 3500, 0, 500, 5500],
    ['Dec', 500, 0, 100, 3000 ],
]
# 将每一行的内容分别写入活动工作表的第一和第二列 .
for row in data:
    ws.append(row)
# 创建RadarChart类的对象
chart = RadarChart()
# 雷达图的填充类型
chart.type = "filled"
# 创建绘图数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 13)
data = Reference(ws, min_col = 2, max_col = 5, min_row = 2, max_row = 13)
# 向雷达图对象添加数据
chart.add_data(data, titles_from_data = True)
# 在图表对象中设置标签
chart.set_categories(labels)
# 设置图表标题
chart.title = "Radar Chart"
# 设置图表样式
chart.style = 26
# 从图表中删除y轴
chart.y_axis.delete = True
# 将图表添加到工作表中
# 图表的左上角固定在单元格G2上 .
ws.add_chart(chart, "G2")
# 保存文件
wb.save("Radar.xlsx")

输出:


代码3:绘制表面图
可以在表面图中绘制工作表中按列或行排列的数据。当您想在两组数据之间找到最佳组合时,表面图很有用。与地形图一样,颜色和图案表示位于相同值范围内的区域。要在Excel工作表上绘制Surface图表,请使用openpyxl.chart子模块中的SurfaceChart类。

# 从openpyxl导入工作簿
from openpyxl import Workbook
# 从openpyxl.chart sub_module导入SurfaceChart,Reference,Series
from openpyxl.chart import SurfaceChart, Reference, Series
# 调用openpyxl的Workbook()函数以创建一个新的空白Workbook对象
wb = Workbook()
# 从active属性获取工作簿活动表.
ws = wb.active
# 给定数据
data = [
    [None, 10, 20, 30, 40, 50, ],
    [0.1, 15, 65, 105, 65, 15, ],
    [0.2, 35, 105, 170, 105, 35, ],
    [0.3, 55, 135, 215, 135, 55, ],
    [0.4, 75, 155, 240, 155, 75, ],
    [0.5, 80, 190, 245, 190, 80, ],
    [0.6, 75, 155, 240, 155, 75, ],
    [0.7, 55, 135, 215, 135, 55, ],
    [0.8, 35, 105, 170, 105, 35, ],
    [0.9, 15, 65, 105, 65, 15],
]
# 将每一行的内容分别写入活动工作表的第一和第二列 .
for row in data:
    ws.append(row)
# 创建SurfaceChart类的对象
chart = SurfaceChart()
# 创建绘图数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 10)
data = Reference(ws, min_col = 2, max_col = 6, min_row = 1, max_row = 10)
# 向表面图对象添加数据
chart.add_data(data, titles_from_data = True)
# 在图表对象中设置标签
chart.set_categories(labels)
# 设置图表标题
chart.title = "Surface Chart"
# 设置图表样式
chart.style = 26
# 将图表添加到工作表中
# 图表的左上角固定到单元格H2 .
ws.add_chart(chart, "H2")
# 保存文件
wb.save("Surface.xlsx")

输出:



代码4:绘制Surface 3D图表
要在Excel工作表上绘制3D曲面图,请使用openpyxl.chart子模块中的SurfaceChart3D类。

# 从openpyxl导入工作簿
from openpyxl import Workbook
# 从openpyxl.chart sub_module导入SurfaceChart,Reference,Series
from openpyxl.chart import SurfaceChart3D, Reference, Series
# 调用openpyxl的Workbook()函数以创建一个新的空白Workbook对象
wb = Workbook()
# 从active属性获取工作簿活动表.
ws = wb.active
# 给定数据
data = [
    [None, 10, 20, 30, 40, 50, ],
    [0.1, 15, 65, 105, 65, 15, ],
    [0.2, 35, 105, 170, 105, 35, ],
    [0.3, 55, 135, 215, 135, 55, ],
    [0.4, 75, 155, 240, 155, 75, ],
    [0.5, 80, 190, 245, 190, 80, ],
    [0.6, 75, 155, 240, 155, 75, ],
    [0.7, 55, 135, 215, 135, 55, ],
    [0.8, 35, 105, 170, 105, 35, ],
    [0.9, 15, 65, 105, 65, 15],
]
# 将每一行的内容分别写入活动工作表的第一和第二列 .
for row in data:
    ws.append(row)
# 创建SurfaceChart3D类的对象
chart = SurfaceChart3D()
# 创建绘图数据
labels = Reference(ws, min_col = 1, min_row = 2, max_row = 10)
data = Reference(ws, min_col = 2, max_col = 6, min_row = 1, max_row = 10)
# 将数据添加到Surface chart 3D对象
chart.add_data(data, titles_from_data = True)
# 在图表对象中设置标签
chart.set_categories(labels)
# 设置图表标题
chart.title = "Surface Chart 3D"
# 设置图表样式
chart.style = 26
# 将图表添加到工作表中图表的左上角锚定到单元格H2 .
ws.add_chart(chart, "H2")
# 保存文件
wb.save("Surface3D.xlsx")

输出: