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?

Dan
quelle
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.

mwaskom
quelle
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)
Gijs
quelle
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)
Ein Mann
quelle
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()
user5875384
quelle
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.

Robvh
quelle
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
serv-inc
quelle
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.

Rishi Jain
quelle