xlsxwriter – Excel饼图的图例 – python

我有一个Excel标签(工作表)的Excel文件。 每个工作表具有相同的结构并包含两列 – 第一列包含品牌名称,第二列包含与每个品牌对应的值。 对于excel文件中的每张表格,我想制作一个饼图,显示每个品牌的份额。

您可以用来运行脚本的示例xls文件就在这里

我写的代码很简单,生成图表。 问题在于图表的图例需要序列号名称而不是品牌的名称。

import pandas as pd import xlsxwriter as excel df = pd.read_excel("/Users/jack/Documents/python-pptx/filename", sheetname=None) workbook = excel.Workbook('/Users/jack/Documents/python-pptx/chart_pie.xlsx') for sheetname, data in df.iteritems(): if len(data) > 0: worksheet = workbook.add_worksheet(sheetname) chart = workbook.add_chart({'type': 'pie'}) worksheet.write_column('A1', data['Brand']) worksheet.write_column('B1', data['Share_of_interactions']) chart.add_series({'categories': '='+sheetname+'!$A$1:$A$'+str(len(data)), 'values': '='+sheetname+'!$B$1:$B$'+str(len(data)), 'name': '='+sheetname+'!$A$1:$A$'+str(len(data))}) ## insert chart into the worksheet worksheet.insert_chart('C3', chart) ## Close the workbook workbook.close() 

这是图表的屏幕截图:

在这里输入图像说明

如果你在图表中注意到的话,说明1,2,3 …。 。 7。 实际上应该是说品牌名称。 我已经将name参数添加到了chart.add_serieschart.add_series的文档中xlsxwriter – http://xlsxwriter.readthedocs.io/chart.html 。 任何帮助将非常感激。

问题是,您的工作表名称中有一个空格,如Sheet 1 。 你需要把它放在单引号中:

 df = pd.read_excel("/Users/julien/Downloads/SO_Example_Df.xlsx", sheetname=None) workbook = excel.Workbook('/Users/julien/Downloads/SO_chart_pie.xlsx') for sheetname, data in df.items(): if len(data) > 0: worksheet = workbook.add_worksheet(sheetname) chart = workbook.add_chart({'type': 'pie'}) worksheet.write_column('A1', data['Brand']) worksheet.write_column('B1', data['Share_of_interactions']) # Here, add single quotes around the sheetname chart.add_series({'categories': "='"+sheetname+"'!$A$1:$A$"+str(len(data)), 'values': "='"+sheetname+"'!$B$1:$B$"+str(len(data)), 'name': 'My pie chart'}) ## insert chart into the worksheet worksheet.insert_chart('C3', chart) ## Close the workbook workbook.close() 

在这里输入图像描述

在Excel和XlsxWriter中,饼图中数据点的名称来自“类别”。 这与名称来自系列名称的其他“2D”图表types不同。 这是因为饼图是单个系列图的特例。

无论如何,如果你的分类指向你想要的名字,他们将被显示。 喜欢这个:

 import pandas as pd # Some sample data to plot. data = {'apples': 10, 'berries': 32, 'squash': 21, 'melons': 13, 'corn': 18} # Create a Pandas dataframe from the data. df = pd.DataFrame([data], index=['Farm']) # Create a Pandas Excel writer using XlsxWriter as the engine. excel_file = 'pie.xlsx' sheet_name = 'Sheet1' writer = pd.ExcelWriter(excel_file, engine='xlsxwriter') df.to_excel(writer, sheet_name=sheet_name) # Access the XlsxWriter workbook and worksheet objects from the dataframe. workbook = writer.book worksheet = writer.sheets[sheet_name] # Create a chart object. chart = workbook.add_chart({'type': 'pie'}) # Configure the chart from the dataframe data. chart.add_series({ 'categories': ['Sheet1', 0, 1, 0, 5], 'values': ['Sheet1', 1, 1, 1, 5], }) # Insert the chart into the worksheet. worksheet.insert_chart('A4', chart) # Close the Pandas Excel writer and output the Excel file. writer.save() 

此外,请注意使用类别和值的列表,而不是范围string。 这种可选的格式在处理可变数据和处理任何工作表名称引用时更容易。

输出:

在这里输入图像说明