2017-09-14 1 views
2

J'ai créé mon camembert, mais en ce moment je suis en utilisant une gamme de cellules comme ceci:Création graphique en python

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

qui me donne un diagramme circulaire avec les catégories qui se trouvent dans A3-A10 et les valeurs qui correspondent à partir des cellules F3-F10. Le problème que je suis est malheureusement je ne vais pas toujours avoir des données dans chacune de ces cellules. donc je peux avoir des données dans une feuille de calcul qui a des catégories et des valeurs qui peuvent aller de A3-A6 et valeurs = F3-F6 et parfois il a seulement des données qui vont de A3-A9 et valeurs = F3-F9. Mon problème est quand je montre ma légende pour les différentes feuilles de calcul dont ils ont des champs manquants et je me demandais si c'était un moyen d'obtenir la longueur de A pour obtenir les catégories et la longueur de F3 pour obtenir les valeurs quand ma légende est montrant qu'il montre et représente seulement les lignes avec des données.

Répondre

2

En supposant que vous puissiez masquer dynamiquement les lignes sans données, il existe une solution assez simple.

J'ai retravaillé quelques exemples de données utilisés dans les documents xlsxwriter, puis recherché les valeurs de Nan. S'il y en a, ils sont cachés et donc pas dans le camembert.

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