openpyxl 带滑动 x/y 轴的散点图

问题描述 投票:0回答:1

从以下示例开始: https://openpyxl.readthedocs.io/en/stable/charts/scatter.html#scatter-charts

原始散点图](https://i.sstatic.net/82ypMpIT.png)

我想生成这个图,其中 x 轴和 y 轴只是交换(即水平轴上的“百分比”和垂直轴上的“大小”),不改变 Excel 工作表中的数据并且具有相同的标签对于每个系列设置“title_from_data=True”。

听起来很简单,但我没有找到任何提示如何做到这一点。

openpyxl scatter-plot axis flip
1个回答
0
投票

总的来说非常简单。只需将所有 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")
© www.soinside.com 2019 - 2024. All rights reserved.