Seaborn faktör grafiğindeki etiket metnini döndür


156

Basit bir faktör planım var

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

görüntü açıklamasını buraya girin

Sorun, x etiketlerinin hepsinin birlikte çalışması ve onları okunamaz hale getirmesidir. Etiketleri okunabilir hale getirmek için metni nasıl döndürürsünüz?


30
import matplotlib.pylab as plt. plt.xticks(rotation=‌​45)
rafaelvalle

Dexplot kütüphane , teh rakam boyutunu ayarlamak etiketler, wrap matplotlib kullanmadan tüm dpi yeteneğine sahiptir.
Ted Petrou

Yanıtlar:


146

Aman, normal matplotlib komutlarını kullanabileceğiniz konusunda haklı, ancak bu aynı zamanda şunlara da dahildir 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)

görüntü açıklamasını buraya girin

Bunun "işe yaramadığını" iddia eden bazı yorumlar ve başka bir cevap var, ancak herkes kodu burada yazıldığı gibi çalıştırabilir ve çalıştığını görebilir. Diğer cevap neyin işe yaramadığına dair tekrarlanabilir bir örnek sağlamaz, bu da ele almayı çok zorlaştırır, ancak benim tahminim, insanların bu çözümü a yerine bir Axesnesne döndüren işlevlerin çıktısına uygulamaya çalıştığıdır Facet Grid. Bunlar farklı şeylerdir ve Axes.set_xticklabels()yöntem gerçekten de bir etiket listesi gerektirir ve yalnızca üzerindeki mevcut etiketlerin özelliklerini değiştiremez Axes. Ders, ne tür nesnelerle çalıştığınıza dikkat etmenin önemli olduğudur.


Bir hata alıyorum: IndexError: çok fazla dizin. Kodum! g = sns.factorplot ("month_date", "num_proposals", "hesap", sıralı_veriler, col = "hesap", col_wrap = 3, sharex = False); g.set_xticklabels (rotasyon = 30)
yoshiserry

10
ax.set_xticklabels (ax.get_xticklabels (), rotasyon = 30): - @soupault Bu hesabın ile ama belki g.axes.flatten () içinde balta için biraz süpürge-geldi ne benzer, benim için çalıştı
odedbd

6
Kullanım ha="right"onların çentik işaretleriyle merkez hizalama x ekseni etiketlere. yanig.set_xticklabels([label1, label2], rotation=30, ha='right')
Manavalan Gajapathy

77
Değiştim kadar yukarıdaki birkaç benzer yorumlar, bu bana bir hata verdi g.set_xticklabels(rotation=30)için g.set_xticklabels(g.get_xticklabels(), rotation=30)bu cevap sayesinde: stackoverflow.com/a/39689464/1870832
Maksimum Güç

1
Bazı Seaborn çizim yöntemleri bir FacetGridnesne döndürür, bazıları bir Matplotlib Axesnesnesi döndürür . İlki için etiketleri belirlememek işe yarayacak, ikincisi için işe yaramayacaktır. FacetGridDokümantasyona bakarak hangilerinin nesne olduğunu görebilirsiniz : seaborn.pydata.org/api.html . Örneğin, bunu kullanırsanız g = sns.catplot()işe yarayacaktır, ancak sns.barplot()bir Axesnesne döndürdüğü için çalışmayacaktır .
getup8

261

@Mwaskorn'un cevabıyla ilgili bir sorun yaşadım, yani

g.set_xticklabels(rotation=30)

başarısız olur, çünkü bu aynı zamanda etiketleri gerektirir. @Aman'ın cevabından biraz daha kolay,

plt.xticks(rotation=45)

33
Bunun gibi etiketleri de alabilirsiniz g.set_xticklabels(g.get_xticklabels(), rotation=30). Çıkışı bastırmak istiyorsanız, onu bir değişkene atayın.
joelostblom

3
Bunun plt.xticsbenim için işe yaradığında doğru olduğunu düşünüyorum .
muammar

Yukarıdaki tüm seçenekleri bir keman arsası için denedim ve plt.xticks (rotasyon = n) işe
koyulabildiğim

30

Bu hala bir matplotlib nesnesidir. Bunu dene:

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

8

Biri bunun küme haritası CorrGrids için nasıl yapılacağını merak ederse (verilen bir seaborn örneğinin parçası):

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

Ayrıca plt.setpaşağıdaki şekilde de kullanabilirsiniz :

import matplotlib.pyplot as plt
import seaborn as sns

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

Etiketleri 90 derece döndürmek için.


5

Bir için seaborn.heatmap, bunları kullanarak döndürebilirsiniz ( @ Aman'ın cevabına göre )

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
bu benim için çalıştı, sadece rotasyonda geçmek hiçbir şey yapmadı, bu işe
yaramak

1

Fasetgrid tarafından desteklenen herhangi bir denizorn arsası ile çalışmaz (örneğin, catplot)

g.set_xticklabels(rotation=30) 

ancak barplot, countplot vb. fasetgrid tarafından desteklenmediklerinden çalışacaktır. Aşağıda onlar için çalışacak.

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

Ayrıca, üst üste yerleştirilmiş 2 grafiğiniz varsa, onu destekleyen grafikte set_xticklabels'ı deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.