Drehen Sie den Beschriftungstext im Seegeborenen-Faktor-Plot


152

Ich habe einen einfachen Faktorplot

import seaborn as sns
g = sns.factorplot("name", "miss_ratio", "policy", dodge=.2, 
    linestyles=["none", "none", "none", "none"], data=df[df["level"] == 2])

Geben Sie hier die Bildbeschreibung ein

Das Problem ist, dass die x-Beschriftungen alle zusammen ausgeführt werden, sodass sie nicht mehr lesbar sind. Wie drehen Sie den Text, damit die Beschriftungen lesbar sind?


29
import matplotlib.pylab as plt. plt.xticks(rotation=‌​45)
Rafaelvalle

Die Dexplot-Bibliothek bietet die Möglichkeit, Etiketten zu verpacken, die Figurengröße und dpi festzulegen, ohne matplotlib zu verwenden.
Ted Petrou

Antworten:


137

Aman ist richtig, dass Sie normale matplotlib-Befehle verwenden können, aber dies ist auch integriert in FacetGrid:

import seaborn as sns
planets = sns.load_dataset("planets")
g = sns.factorplot("year", data=planets, aspect=1.5, kind="count", color="b")
g.set_xticklabels(rotation=30)

Geben Sie hier die Bildbeschreibung ein

Es gibt einige Kommentare und eine andere Antwort, die besagt, dass dies "nicht funktioniert". Jeder kann den Code wie hier beschrieben ausführen und sehen, dass er funktioniert. Die andere Antwort liefert kein reproduzierbares Beispiel dafür, was nicht funktioniert, was es sehr schwierig macht, darauf einzugehen, aber ich vermute, dass die Leute versuchen, diese Lösung auf die Ausgabe von Funktionen anzuwenden, die ein AxesObjekt anstelle von a zurückgeben Facet Grid. Dies sind verschiedene Dinge, und die Axes.set_xticklabels()Methode erfordert in der Tat eine Liste von Beschriftungen und kann die Eigenschaften der vorhandenen Beschriftungen auf dem nicht einfach ändern Axes. Die Lektion ist, dass es wichtig ist, darauf zu achten, mit welchen Objekten Sie arbeiten.


Ich erhalte eine Fehlermeldung: IndexError: zu viele Indizes. Mein Code! g = sns.factorplot ("month_date", "num_proposals", "account", sorted_data, col = "account", col_wrap = 3, sharex = False); g.set_xticklabels (Rotation = 30)
Yoshiserry

10
@soupault - das hat bei mir funktioniert, ähnlich wie Sie es sich ausgedacht haben, aber vielleicht etwas sauberer - für ax in g.axes.flatten (): ax.set_xticklabels (ax.get_xticklabels (), rotation = 30)
odedbd

6
Verwenden Sie ha="right"diese Option, um die Beschriftungen der x-Achse mittig an ihren Häkchen auszurichten. dhg.set_xticklabels([label1, label2], rotation=30, ha='right')
Manavalan Gajapathy

72
Ähnlich wie ein paar Kommentare oben, gab mir dies einen Fehler, bis ich dank dieser Antwort zu geändert g.set_xticklabels(rotation=30)habe g.set_xticklabels(g.get_xticklabels(), rotation=30): stackoverflow.com/a/39689464/1870832
Max Power

1
Einige Seaborn-Plotmethoden geben ein FacetGridObjekt zurück, andere ein Matplotlib- AxesObjekt. Bei ersteren funktioniert das Nichteinstellen der Beschriftungen, bei letzteren nicht. Sie können FacetGridanhand der Dokumentation sehen, welche Objekte vorhanden sind : seaborn.pydata.org/api.html . Wenn Sie g = sns.catplot()dies beispielsweise verwenden, funktioniert dies, jedoch sns.barplot()nicht, weil ein AxesObjekt zurückgegeben wird.
Getup8

252

Ich hatte ein Problem mit der Antwort von @mwaskorn, nämlich das

g.set_xticklabels(rotation=30)

schlägt fehl, da hierfür auch die Beschriftungen erforderlich sind. Ein bisschen einfacher als die Antwort von @Aman ist es, einfach hinzuzufügen

plt.xticks(rotation=45)

33
Sie können die Etiketten auch so erhalten g.set_xticklabels(g.get_xticklabels(), rotation=30). Weisen Sie es einer Variablen zu, wenn Sie die Ausgabe unterdrücken möchten.
Joelostblom

3
Ich denke, das ist richtig, wenn die Einstellung plt.xticsfür mich funktioniert hat.
Muammar

Ich habe alle oben genannten Optionen für eine Geigenhandlung ausprobiert und plt.xticks (Rotation = n) ist nur eine, die ich zur Arbeit bringen kann
A Rob4

29

Dies ist immer noch ein Matplotlib-Objekt. Versuche dies:

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)

8

Wenn sich jemand fragt, wie dies für Clustermap CorrGrids (Teil eines bestimmten Beispiels für Meeresgeborene) funktioniert:

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(context="paper", font="monospace")

# Load the datset of correlations between cortical brain networks
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
corrmat = df.corr()

# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(12, 9))

# Draw the heatmap using seaborn
g=sns.clustermap(corrmat, vmax=.8, square=True)
rotation = 90 
for i, ax in enumerate(g.fig.axes):   ## getting all axes of the fig object
     ax.set_xticklabels(ax.get_xticklabels(), rotation = rotation)


g.fig.show()

6

Sie können auch verwenden plt.setp Folgendes verwenden:

import matplotlib.pyplot as plt
import seaborn as sns

plot=sns.barplot(data=df,  x=" ", y=" ")
plt.setp(plot.get_xticklabels(), rotation=90)

um die Etiketten um 90 Grad zu drehen.


5

Zum Beispiel seaborn.heatmapkönnen Sie diese mit drehen (basierend auf der Antwort von @ Aman ).

pandas_frame = pd.DataFrame(data, index=names, columns=names)
heatmap = seaborn.heatmap(pandas_frame)
loc, labels = plt.xticks()
heatmap.set_xticklabels(labels, rotation=45)
heatmap.set_yticklabels(labels[::-1], rotation=45) # reversed order for y

1
Das hat bei mir funktioniert, nur das Übergeben von Rotationsparametern hat nichts gebracht, ich musste auch die Etiketten übergeben, damit dies funktioniert
Raveen Beemsingh

0

Alle von Facetgrid unterstützten Seegeborenenplots funktionieren nicht mit (z. B. Catplot)

g.set_xticklabels(rotation=30) 

Barplot, Countplot usw. funktionieren jedoch, da sie von Facetgrid nicht unterstützt werden. Unten wird für sie arbeiten.

g.set_xticklabels(g.get_xticklabels(), rotation=30)

Wenn Sie zwei Diagramme übereinander haben, versuchen Sie es mit set_xticklabels im Diagramm, das dies unterstützt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.