2017-09-14 77 views
2

我已经创建了我的饼图,但现在我使用这样的单元格区域:创建饼图在python

chart3.add_series({ 
    'name': 'Pie data', 
    'categories': '=Pivots!$A$3:$A$10', 
    'values':  '=Pivots!$F$3:$F$10'}) 

这给了我与在A3-A10中找到的类别饼图以及与单元格F3-F10对应的值。我遇到的问题很不幸,我并不总是会在每个单元格中都有数据。所以我可能在一个工作表中有数据,其类别和值可能范围从A3-A6和值= F3-F6,有时它只包含范围从A3-A9和值= F3-F9的数据。我的问题是,当我为不同的工作表显示他们缺少字段的图例时,我想知道他们是否只是获得A的长度以获得类别和F3的长度以获取值的方式,因此当我的图例是显示它只显示和表示数据的行。

回答

2

假设它是一个动态隐藏没有数据的行的选项,那么有一个相当直接的解决方案。

我重新编写了xlsxwriter文档中使用的一些示例数据,然后查找了任何Nan值。如果有的话,那些被隐藏,因此不在饼图中。

import xlsxwriter 
import pandas as pd 

headings = ['Category', 'Values'] 
data = [ 
['Apple', 30],['Cherry', 20],['Pecan',15],['Blueberry', 10],['Pumpkin', 10], 
['Mince', float('nan')],['Custard', 3],['Potato', 2], 
] 


pies = pd.DataFrame(data, columns = headings) 

nan_rows = pies.loc[pies['Values'].isnull()].index.values 
hide_rows = nan_rows + 2 

workbook = xlsxwriter.Workbook('test.xlsx', {'strings_to_numbers': True, 
              'strings_to_formulas': True, 
              'nan_inf_to_errors': True}) 

ws = workbook.add_worksheet('Pivots') 

ws.write('A2', headings[0]) 
ws.write('F2', headings[1]) 
ws.write_column('A3', pies['Category']) 
ws.write_column('F3', pies['Values']) 


chart3 = workbook.add_chart({'type': 'pie'}) 

chart3.add_series({ 
'name': 'Pie data', 
'categories': '=Pivots!$A$3:$A$10', 
'values':  '=Pivots!$F$3:$F$10'}) 

chart3.set_title({'name': 'Popular Pie Types'}) 

chart3.set_style(10) 
ws.insert_chart('G11', chart3, {'x_offset': 25, 'y_offset': 10}) 

#This is where we hide the rows in list called hide_rows 
for row_position in hide_rows: 
    ws.set_row(row_position, None, None, {'hidden': True}) 

workbook.close() 

enter image description here