2016-11-11 8 views
0

Ich möchte ein Mosaik-Plot mit statsmodels.graphics.mosaicplot.mosaic() mit Daten erstellen, die leere Zellen wirft. Sie erscheinen in der resultierenden Darstellung hässlich, weil eine Zelle unabhängig von ihrer Größe erstellt wird.statsmodels 'Mosaik-Plot mit leeren Werten

Beispiel:

import matplotlib.pyplot as plt 

import pandas as pd 
from statsmodels.graphics.mosaicplot import mosaic 

df = pd.DataFrame({'size' : ['small', 'large', 'large'], 
        'length' : ['long', 'short', 'long']}) 

print(df) # note that the 'short'-'small' combination is missing 

fig = plt.figure() 
ax = fig.add_subplot(111) 
mosaic(df, ax=ax) 

für Wert „short kleinen“ ein Grundstück mit einer leeren Zelle erzeugt:

enter image description here

Gibt es eine Möglichkeit, die Schaffung dieser Zelle entweder zu vermeiden oder zu Entferne es danach aus der Handlung?

+0

Was genau Sie wollen? Ich sehe keine leere Zelle, die zu erwarten ist. Was genau ist hier falsch? Das Bild ist auch super klein und schwer zu lesen angesichts dieser Größe. – sascha

+0

Danke für die Bearbeitung. Jetzt sehe ich, was du meinst. Ist Nickils Antwort, was du wolltest? (Denken Sie daran, dass der Code python3-konform ist in Bezug auf Diktat) – sascha

+0

@sascha: Aus praktischen Gründen habe ich das Bild vergrößert (von Mitte zu groß). Zwischen dem roten Block für a und dem grünen Block für c finden Sie den dicken weißen Streifen mit c in der Mitte. Das ist die leere Zelle. Der dicke weiße Streifen ist auf den Rand um die Zellen zurückzuführen. – MERose

Antwort

1

eine anonyme Funktion senden Etiketten, deren Werte 0 auszuschließen:

labels = lambda k: "\n".join(k) if df[k] != 0 else "" 
mosaic(df, ax=ax, labelizer=labels) 
+0

Ich bekomme eine lange Rückverfolgung mit 'KeyError: ('klein', 'lang')' am Ende. Ich versuchte 'df.get (k, 0)' stattdessen mit einem noch längeren traceback, der einen 'ValueError gibt: Kann endliche Zahlen im PDF nur ausgeben'. – MERose

+0

Ich habe gerade Lambda _: "" –

Verwandte Themen