如何使用openpyxl绘制指定样式的粒度分布折线图?
用openpyxl绘制指定样式的粒度分布折线图
核心解决思路
要解决数据全被识别为Y轴的问题,关键是明确指定X轴数据源,而非依赖默认的数据表自动识别。以下是完整实现步骤:
步骤1:准备Excel数据结构
确保数据按列分开存储,示例结构如下:
| 粒度值(X轴) | 分布占比(Y轴) |
|---|---|
| 1 | 5 |
| 10 | 20 |
| 100 | 50 |
| 1000 | 20 |
| 10000 | 5 |
步骤2:代码实现
from openpyxl import Workbook from openpyxl.chart import LineChart, Reference, Series # 创建工作簿和工作表 wb = Workbook() ws = wb.active # 写入示例数据(替换为你的实际数据) data = [ ["粒度值", "分布占比"], [1, 5], [10, 20], [100, 50], [1000, 20], [10000, 5] ] for row in data: ws.append(row) # 创建折线图对象 chart = LineChart() chart.title = "粒度分布折线图" chart.y_axis.title = "分布占比" chart.x_axis.title = "粒度值" # 指定Y轴数据(B2到B6) y_data = Reference(ws, min_col=2, min_row=2, max_row=6) # 指定X轴数据(A2到A6),并关联到系列 x_data = Reference(ws, min_col=1, min_row=2, max_row=6) series = Series(y_data, xvalues=x_data, title_from_data=True) # 将系列添加到图表 chart.series.append(series) # 设置X轴为对数刻度(底数10) chart.x_axis.scaling.logBase = 10 # 固定X轴显示指定刻度标签 chart.x_axis.scaling.min = 1 chart.x_axis.scaling.max = 10000 chart.x_axis.majorUnit = 10 # 对数刻度下按10的幂次间隔显示 chart.x_axis.tickLabels.numFmt = "0" # 刻度显示为整数格式 # 设置Y轴为线性刻度(默认即为线性,可按需调整范围) chart.y_axis.scaling.min = 0 chart.y_axis.scaling.max = 60 # 将图表插入工作表 ws.add_chart(chart, "D2") # 保存工作簿 wb.save("粒度分布图表.xlsx")
关键说明
- 指定X轴数据:通过
Series的xvalues参数明确关联X轴数据源,这是解决数据全被识别为Y轴问题的核心。 - 对数刻度设置:
chart.x_axis.scaling.logBase = 10开启X轴对数刻度,majorUnit控制刻度间隔为10的幂次。 - 固定刻度标签:通过
scaling.min和scaling.max锁定X轴范围,tickLabels.numFmt确保刻度以整数形式显示。
内容的提问来源于stack exchange,提问作者Mike K.
相关产品推荐
相关产品推荐

