You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用openpyxl绘制指定样式的粒度分布折线图?

用openpyxl绘制指定样式的粒度分布折线图

核心解决思路

要解决数据全被识别为Y轴的问题,关键是明确指定X轴数据源,而非依赖默认的数据表自动识别。以下是完整实现步骤:

步骤1:准备Excel数据结构

确保数据按列分开存储,示例结构如下:

粒度值(X轴)分布占比(Y轴)
15
1020
10050
100020
100005

步骤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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:07:18