1 2D 面积图
''' 2D 面积图 @author Deniro Li ''' from openpyxl import Workbook from openpyxl.chart import AreaChart, Reference from random import randint wb = Workbook() ws = wb.active # 随机生成销售额数据 rows = [ ['1 月', '北京', '上海'], ] for i in range(2, 14): rows.append([str(i) + ' 月', randint(10, 90), randint(5, 50)]) for row in rows: ws.append(row) # 初始化 AreaChart 对象 chart = AreaChart() chart.title = "区域销售额" chart.style = 10 chart.x_axis.title = '2019 年' chart.y_axis.title = '单位(百万)' # 计算类别与数据的最大行数 max_row = len(rows) # 计算数据的最大列数 max_col = len(rows[1]) # 类别对象 cats = Reference(ws, min_col=1, min_row=1, max_row=max_row) chart.set_categories(cats) # 数据对象 data = Reference(ws, min_col=2, min_row=1, max_col=max_col, max_row=max_row) chart.add_data(data, titles_from_data=True) # 放入 Workbook 对象并指定初始位置 ws.add_chart(chart, 'E5') wb.save('area_2d.xlsx')
运行结果:
- 示例通过随机函数来生成不同区域的销售额数据。
- 注意: 横坐标是月份,但每一月所对应的数据却在下一行!
(1)新建 AreaChart 对象,并初始化各项参数
可以通过 AreaChart 类来建立 2D 面积图对象。它有以下属性:
属性 | 说明 |
---|---|
title | 图标标题 |
style | 图表样式编号 |
x_axis.title | 横坐标标题 |
y_axis.title | 纵坐标标题 |
其中的样式编号所对应的就是 Excel “设计” 标签所对应的图表样式中的某个样式编号:
(2)新建类别对象
AreaChart#set_categories 方法用于设置类别区域对象(即 Reference 对象),这个示例中的类别区域指的是下图中的绿框处:
(3)新建数据对象
AreaChart#add_data 方法用于设置数据区域对象(即 Reference 对象),这个示例中的数据区域指的是下图中的黑框处:
注意: 因为第 13 行第 A 列的值没有用到,所以真实使用时,可以不必填值。
AreaChart#add_data 方法有一个 titles_from_data 属性,表示是否从类别对象获取名称。在本示例中,即是“北京”与“上海”:
(4)放入 Workbook 对象并指定初始位置
Workbook#add_chart 的第二个属性即表示图标在 Excel 左上角初始位置。
2 3D 面积图
我们也可以把刚才的示例转化为 3D 形式。核心代码如下:
... from openpyxl.chart import AreaChart3D ... # 初始化 AreaChart3D 对象 chart=AreaChart3D() chart.style=10 chart.x_axis.title = '2019 年' chart.y_axis.title = '单位(百万)' chart.legend=None chart.height=10 chart.width=30 # 类别对象 cats = Reference(ws, min_col=1, min_row=1, max_row=max_row) chart.set_categories(cats) # 数据对象 data = Reference(ws, min_col=2, min_row=1, max_col=max_col, max_row=max_row) chart.add_data(data, titles_from_data=True) # 放入 Workbook 对象并指定初始位置 ws.add_chart(chart, 'E5') ...
运行结果:
- 生成步骤与 2D 面积图类似,也是初始化面积图对象、类别对象以及数据对象,最后放入 Workbook 对象并指定初始位置。
- 示例中的不同点在于,我们为 AreaChart3D 多设置了一些属性。
属性 | 说明 |
---|---|
legend | 图表颜色区域说明。在本示例中指的就是区域,即 “北京”、“上海”。因为已经是三维图了,所以这里没必要再重复展示(设置为 None)。 |
height | 图表高度,默认为 7.5cm。 |
width | 图标宽度,默认为 15cm。 |
本示例中,将其设置的更大一些。
生成的 3D 图表可能显示的不完全,有的数据被遮挡住了,这时,可以利用 Excel 的三维旋转功能,让图表按照我们所希望的角度进行展示: