Xslxwriter列图表数据标签百分比属性不起作用

时间:2017-06-16 18:05:07

标签: python excel pandas charts xlsxwriter

我在Excel(2016)中为报表创建了一些柱形图,方法是使用python(3.5.3)pandas(0.20.1)创建表,并使用xlsxwriter(0.9.6)创建表格和图表。我想用相对于所有值之和的值的百分比标记每列,如下图所示: Desired Output Chart

根据我对Xslxwriter文档的理解,我在向图表添加系列时只需要包含'data_labels':{'percentage': True}属性,就像我在下面的代码中所做的那样:

df = pandas.DataFrame(data=[1,2,3,4,5],index=['a','b','c','d','e'])
writer = pandas.ExcelWriter('C:/Users/Name_A_Place/sandbox.xlsx')
df.to_excel(writer)
wrkbk = writer.book
wrksht = writer.sheets['Sheet1']
chrt = wrkbk.add_chart({'type':'column'})

chrt.add_series({'categories': '=Sheet1!A2:A6',
                 'values': '=Sheet1!B2:B6',
                 'data_labels': {'percentage':True,
                                 'font': {'rotation':-45}},
                 })

wrksht.insert_chart("E1",chrt)
writer.save()

但是,此代码会创建一个没有标签的图表:Actual Output Chart

我是否误解了百分比数据标签属性的工作原理?

我一直在解决这个问题,方法是创建一个单独的百分比列,并使用该列中的值标记'data_labels': {'value': True}属性,但是如果有人能解释为什么我的代码没有产生我想要的输出,我我会很感激的。

2 个答案:

答案 0 :(得分:2)

百分比属性用于打开数据标签的显示,作为系列的百分比。它主要用于饼图:

import pandas as pd
df = pd.DataFrame(data=[1,2,3,4,5],index=['a','b','c','d','e'])
writer = pd.ExcelWriter('C:/Users/Name_A_Place/sandbox.xlsx')
df.to_excel(writer)
wrkbk = writer.book
wrksht = writer.sheets['Sheet1']
chrt = wrkbk.add_chart({'type':'pie'})

chrt.add_series({'categories': '=Sheet1!A2:A6',
                 'values': '=Sheet1!B2:B6',
                 'data_labels': {'percentage':True,
                                 'font': {'rotation':-45}},
                 })

wrksht.insert_chart("E1",chrt)
writer.save()

答案 1 :(得分:1)

我认为你只是碰到了XlsxWriter documentation中未明确记录的Excel限制。如果您打开Excel并手动创建图表,您会注意到数据标签的“百分比”选项不适用于条形图或柱形图(但是用于饼图或其他图标)。您需要使用单独的单元格(“单元格值”)继续使用数据标签。我在issue上打开了XlsxWriter GitHub,试图让文档得到改进。

带有百分比数据标签选项Excel pie chart with percentage data label

的饼图

没有百分比数据标签选项Excel column chart with no percentage data label

的柱形图