python - Python OpenPyxl:从按列排列的数据创建折线图
问题描述
我正在尝试使用Opepyxl
. 目标是有一个折线图,显示第一行中项目的 Std.dev 趋势(gap1MachiSide、Gap1OperatorSide 等);
这是我的代码:
#Create a linechart for std.dev
chart1 = LineChart()
chart1.style = 10
chart1.title = "Gap MC-OP Std.Dev"
chart1.y_axis.title = 'St.Dev [mm]'
chart1.x_axis.title = 'Gap #'
data = Reference(ws2, min_col=2, min_row=3, max_row=3, max_col=35)
chart1.add_data(data)
s1= chart1.series[0]
s1.marker.symbol = "triangle"
chart1.dataLabels = DataLabelList()
chart1.dataLabels.showVal = True
chart1.shape = 30
chart1.width = 35
chart1.height = 7
ws2.add_chart(chart1, "A10")
解决方案
openpyxl 文档讨论了使用列而不是行中的数据构建图表。我有同样的问题——openpyxl 似乎不支持行中的数据。
Series() 中没有参数来按行而不是按列指定数据。显然,它假定数据在列中,并且在弹出数据系列名称时会丢失有效数据。我没有尝试过,但不使用 title_from_data 参数也可能有效。
对我有用的是在调用 add_data() 或 Series 构造函数之后将 series.val 字段更改为所需的行范围。请注意,使用 title_from_data=True 会将第一个单元格弹出 Reference range_string,将其更改为仅数据单元格范围。
因为 openpyxl 在其内部结构中使用了相当强的类型,所以我需要使用一些类型强制来完成这项工作。
替换这两行:
data = Reference(ws2, min_col=2, min_row=3, max_row=3, max_col=35)
chart1.add_data(data)
用这五行:
from openpyxl.chart.data_source import NumRef, NumDataSource
data = Reference(ws2, min_col=2, min_row=3, max_row=3, max_col=35) #no change
chart1.add_data(data) #no change
data_range = str(data)
chart1.series[-1].val = NumDataSource(NumRef(data_range))
推荐阅读
- python - python - 如何使用python pandas在不重复列的情况下加入DataFrames并保持默认的左或非NaN?
- arrays - 将多维数组转换为低维数组的数组
- wordpress - Wordpress 灯箱库不显示“下一个”图像
- ecmascript-6 - Flow:在 map/filter/reduce 期间保留类型
- sql - 使用 sumifs 等效查询更新 sql 表
- android - Android Studio:无法找到请求目标的有效认证路径
- git - 以特殊格式收集存储库中所有分支的列表 [Git]
- python - 根据条件转换熊猫数据框列
- regex - 正则表达式 - Notepad ++ 或任何支持的环境中的“If-Then-Else 条件”
- java - 无法通过终端使用 gradlew 命令构建 corda