2014-10-24 17 views
47

Ich habe eine einfache factorplotDrehen Beschriftungstext in Seaborn factorplot

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

enter image description here

Das Problem ist, dass die x-Etiketten alle zusammen laufen, sie unlesbar zu machen. Wie rotieren Sie den Text so, dass die Beschriftungen lesbar sind?

+8

'importieren Sie matplotlib.pylab als plt' . 'plt.xticks (rotation = 45)' – rafaelvalle

+0

@rafaelvalle das ist das einzige, was jetzt für mich funktioniert. Vielen Dank! – szeitlin

Antwort

61

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

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) 

enter image description here

einige Kommentare Es gibt und eine andere Antwort behauptet das funktioniert nicht, aber jeder kann den Code wie hier beschrieben ausführen und sehen, dass es funktioniert. Die andere Antwort bietet kein reproduzierbares Beispiel dafür, was nicht funktioniert, was es sehr schwierig macht, sie anzusprechen, aber meine Vermutung ist, dass Leute versuchen, diese Lösung auf die Ausgabe von Funktionen anzuwenden, die an Axes object anstelle von Facet Grid zurückgeben. Dies sind verschiedene Dinge, und die Axes.set_xticklabels() Methode erfordert tatsächlich eine Liste von Etiketten und kann nicht einfach die Eigenschaften der vorhandenen Etiketten auf der Axes ändern. Die Lektion ist, dass es wichtig ist, darauf zu achten, mit welcher Art von Objekten Sie arbeiten.

+1

Nizza; Das ist viel einfacher für die Augen. – Aman

+0

Ich bekomme einen Fehler: IndexError: zu viele Indizes. Mein Code! g = sns.factorplot ("Monatsdatum", "Anzahl_Angebote", "Konto", sortierte_Daten, Col = "Konto", Col_Wrap = 3, sharex = False); g.set_xticklabels (rotation = 30) – yoshiserry

+0

was ist, wenn ich 'DataFrame' mit' sns.pairplot' plotte? wie man es in jeden Graphen wirft? – soupault

21

Dies ist immer noch ein Matplotlib-Objekt. Versuchen Sie folgendes:

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

hatte ich ein Problem mit der Antwort von @mwaskorn, nämlich dass

g.set_xticklabels(rotation=30) 

fehlschlägt, weil dies auch die Etiketten benötigt. Ein bisschen leichter als die Antwort von @Aman ist nur

für mich hinzufügen
plt.xticks(rotation=45) 
+20

Sie können auch die Etiketten wie so 'g.set_xticklabels (g. get_xticklabels(), rotation = 30) '. Ordnen Sie es einer Variablen zu, wenn Sie die Ausgabe unterdrücken möchten. –

1

Was hat funktioniert:

planets = sns.load_dataset("planets") 
g = sns.factorplot("year", data=planets, aspect=1.5,kind="count", color="b") 
g.set_xticklabels(labels = planets["year"].value_counts().index.tolist(),rotation=30) 
2

Wenn jemand fragt, wie man dies für clustermap CorrGrids (Teil eines gegebenen Seaborn Beispiel):

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() 
1

Für eine seaborn.heatmap, können Sie diese mit (basierend auf @Aman's answer) drehen

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 
Verwandte Themen