从以下示例开始: https://openpyxl.readthedocs.io/en/stable/charts/scatter.html#scatter-charts
原始散点图](https://i.sstatic.net/82ypMpIT.png)
我想生成这个图,其中 x 轴和 y 轴只是交换(即水平轴上的“百分比”和垂直轴上的“大小”),不改变 Excel 工作表中的数据并且具有相同的标签对于每个系列设置“title_from_data=True”。
听起来很简单,但我没有找到任何提示如何做到这一点。
总的来说非常简单。只需将所有 X 引用更改为 Y 引用,反之亦然。
但是在创建系列时不能使用
title_from_data=True
,因为这仅适用于默认散点图,其中多个系列的 Y 值映射到相同的 X 值,因此系列标题来自 Y 值上方的引用。因此,对于这种特殊情况,必须使用 SeriesLabel
和 StrRef
从标题引用创建系列标题。
示例:
from openpyxl import Workbook
from openpyxl.chart import (
ScatterChart,
Reference,
Series,
)
from openpyxl.chart.series import SeriesLabel, StrRef
wb = Workbook()
ws = wb.active
rows = [
['Size', 'Batch 1', 'Batch 2'],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 25],
[6, 25, 35],
[7, 20, 40],
]
for row in rows:
ws.append(row)
chart = ScatterChart()
chart.title = "Scatter Chart"
chart.style = 13
chart.x_axis.title = 'Percentage'
chart.y_axis.title = 'Size'
yvalues = Reference(ws, min_col=1, min_row=2, max_row=7)
for i in range(2, 4):
xvalues = Reference(ws, min_col=i, min_row=2, max_row=7)
series = Series(yvalues, xvalues)
series_title_ref = Reference(ws, min_col=i, min_row=1, max_row=1)
series.title = SeriesLabel(strRef=StrRef(series_title_ref))
chart.series.append(series)
ws.add_chart(chart, "A10")
wb.save("scatter.xlsx")