使用openpyxl在图表表中切换行/列

2 投票
1 回答
34 浏览
提问于 2025-04-14 18:28

我有一个很大的Excel表格,里面有很多数据。由于一些原因,我的数据是以转置的方式排列的:

直方图 区间 0 区间 1 区间 2 区间 3 区间 4 区间 5
测试 1 0 1 5 2 1 0
测试 2 0 0 1 7 2 0

当我把这些数据画图时,我得到的是5组数据,每组有2个值。我希望能得到2组数据,每组有5个点(显示直方图)。这就像在Excel里按一下“切换行/列”按钮一样。不过,由于我有很多图表,手动为每个图表按这个按钮是不现实的。

我该如何在Python中实现这个效果呢?任何帮助都非常感谢。

我做了一个简化版的代码,使用的表格和上面的一样。
我意识到在这种情况下不需要使用多重索引,但在我的完整代码中是需要的。

import pandas as pd
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
   
excel_file = 'test.xlsx'
# create and write data
excel_tests_data = [[0, 1, 5, 2, 1, 0],
                    [0, 0, 1, 7, 2, 0]]
df = pd.DataFrame(excel_tests_data)
df.columns=pd.MultiIndex.from_tuples([('bin '+str(i), ) for i in range(6)])
df.to_excel(excel_file, startrow=0, sheet_name='test') 
# open workbook
workbook = load_workbook(excel_file)
worksheet = workbook.worksheets[0]
# create chartsheet
chartsheet = workbook.create_chartsheet()
chartsheet.title = "Testsheet"
chart = LineChart()
data = Reference(worksheet, 
                    min_col = 2,
                    min_row = 3,
                    max_row = 4,
                    max_col = 7)
chart.title = "test"
chart.add_data(data)
chartsheet.add_chart(chart)
# save and close workbook
workbook.save(excel_file)
workbook.close()

1 个回答

2

如果你参考一下这个切换行/列的按钮,你可以简单地打开这个from_rows参数。

chart.add_data(data)

chart.add_data(data, from_rows=True)

输出结果(text.xlsx):

在这里输入图片描述

撰写回答