2016-02-05 14 views
1

Je pandas géants dataframe comme ceci:mosaique avec pourcentage et la valeur des valeurs comme marqueurs dans des pandas géants DF

 LEVEL_1  LEVEL_2 Freq Percentage 
0  HIGH   HIGH 8842  17.684 
1 AVERAGE   LOW 2802  5.604 
2  LOW   LOW 22198  44.396 
3 AVERAGE  AVERAGE 6804  13.608 
4  LOW  AVERAGE 2030  4.060 
5  HIGH  AVERAGE 3666  7.332 
6 AVERAGE   HIGH 2887  5.774 
7  LOW   HIGH 771  1.542 

je peux obtenir des carreaux de LEVEL_1 et LEVEL_2:

from statsmodels.graphics.mosaicplot import mosaic 
mosaic(df, ['LEVEL_1','LEVEL_2']) 

enter image description here
Je viens vouloir mettre Freq et Percentage au centre de chaque tuile de la mosaïque. Comment puis-je faire cela?

+1

Je pense que la voie est avant d'utiliser l'option '' labelizer' de mosaïque() '. – MERose

Répondre

2

Voici un début. Remarque J'ai dû ajouter une rangée de zéros au DataFrame pour l'étiquetage. Vous pouvez rendre l'étiquetage plus agréable par formatage de chaîne dans la fonction lambda. Vous souhaiterez également réorganiser les en-têtes.

import pandas as pd 
from statsmodels.graphics.mosaicplot import mosaic 
import io 
d = io.StringIO() 
d.write("""  LEVEL_1  LEVEL_2 Freq Percentage\n 
     HIGH   HIGH 8842  17.684\n 
    AVERAGE   LOW 2802  5.604\n 
     LOW   LOW 22198  44.396\n 
    AVERAGE  AVERAGE 6804  13.608\n 
     LOW  AVERAGE 2030  4.060\n 
     HIGH  AVERAGE 3666  7.332\n 
    AVERAGE   HIGH 2887  5.774\n 
     LOW   HIGH 771  1.542""") 
d.seek(0) 
df = pd.read_csv(d, skipinitialspace=True, delim_whitespace=True) 
df = df.append({'LEVEL_1': 'HIGH', 'LEVEL_2': 'LOW', 'Freq': 0, 'Percentage': 0}, ignore_index=True) 
df = df.sort_values(['LEVEL_1', 'LEVEL_2']) 
df = df.set_index(['LEVEL_1', 'LEVEL_2']) 
print(df) 

mosaic(df['Freq'], labelizer=lambda k: df.loc[k].values); 

plot from a Jupyter notebook