Putar teks label di petak faktor seaborn

152

Saya punya plot faktor sederhana

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

masukkan deskripsi gambar di sini

Masalahnya adalah bahwa semua label x berjalan bersama, membuatnya tidak dapat dibaca. Bagaimana Anda memutar teks sehingga label dapat dibaca?

dan
sumber
29
import matplotlib.pylab as plt. plt.xticks(rotation=‌​45)
rafaelvalle
The Dexplot perpustakaan memiliki kemampuan untuk membungkus label, mengatur teh ukuran angka, dpi semua tanpa menggunakan matplotlib.
Ted Petrou

Jawaban:

137

Aman benar bahwa Anda dapat menggunakan perintah matplotlib normal, tetapi ini juga dibangun ke dalam 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)

masukkan deskripsi gambar di sini

Ada beberapa komentar dan jawaban lain mengklaim ini "tidak berfungsi", namun, siapa pun dapat menjalankan kode seperti yang ditulis di sini dan melihat bahwa itu berfungsi. Jawaban lain tidak memberikan contoh yang direproduksi dari apa yang tidak bekerja, sehingga sangat sulit untuk alamat, tapi saya duga adalah bahwa orang yang mencoba untuk menerapkan solusi ini ke output dari fungsi yang mengembalikan sebuah Axesobjek bukannya Facet Grid. Ini adalah hal yang berbeda, dan Axes.set_xticklabels()metode ini memang memerlukan daftar label dan tidak bisa begitu saja mengubah properti label yang ada di Axes. Pelajarannya adalah bahwa penting untuk memperhatikan objek apa yang sedang Anda kerjakan.

mwaskom
sumber
Saya mendapatkan kesalahan: IndexError: terlalu banyak indeks. Kode saya! g = sns.factorplot ("month_date", "num_proposals", "akun", sort_data, col = "akun", col_wrap = 3, sharex = False); g.set_xticklabels (rotasi = 30)
yoshiserry
10
@soupault - ini bekerja untuk saya, mirip dengan apa yang Anda buat tapi mungkin sedikit lebih bersih- untuk kapak di g.axes.flatten (): ax.set_xticklabels (ax.get_xticklabels (), rotasi = 30)
odedbd
6
Gunakan ha="right"untuk mensejajarkan label sumbu-x dengan tanda centangnya. yaitug.set_xticklabels([label1, label2], rotation=30, ha='right')
Manavalan Gajapathy
72
mirip dengan beberapa komentar di atas, ini memberi saya kesalahan sampai saya berubah g.set_xticklabels(rotation=30)menjadi g.set_xticklabels(g.get_xticklabels(), rotation=30)berkat jawaban ini: stackoverflow.com/a/39689464/1870832
Max Power
1
Beberapa metode plot Seaborn mengembalikan FacetGridobjek, beberapa mengembalikan Axesobjek Matplotlib . Untuk yang pertama, tidak mengatur label akan berfungsi, untuk yang kedua, itu tidak akan. Anda dapat melihat objek mana saja FacetGriddengan melihat dokumentasi: seaborn.pydata.org/api.html . Misalnya, jika Anda menggunakan g = sns.catplot()ini akan berhasil, tetapi sns.barplot()tidak karena itu mengembalikan Axesobjek.
getup8
253

Saya punya masalah dengan jawaban oleh @ mwaskorn, yaitu itu

g.set_xticklabels(rotation=30)

gagal, karena ini juga memerlukan label. Sedikit lebih mudah daripada jawaban oleh @Aman untuk hanya menambahkan

plt.xticks(rotation=45)
Gijs
sumber
33
Anda juga bisa mendapatkan label seperti itu g.set_xticklabels(g.get_xticklabels(), rotation=30). Tetapkan ke variabel jika Anda ingin menekan output.
joelostblom
3
Saya pikir ini benar, ketika pengaturan plt.xticsbekerja untuk saya.
muammar
mencoba semua opsi di atas untuk plot biola dan plt.xticks (rotasi = n) hanya satu yang bisa saya peroleh
A Rob4
29

Ini masih merupakan objek matplotlib. Coba ini:

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

Jika ada yang bertanya-tanya bagaimana cara ini untuk clustermap CorrGrids (bagian dari contoh dasar laut yang diberikan):

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()
pengguna5875384
sumber
6

Anda juga dapat menggunakan plt.setpsebagai berikut:

import matplotlib.pyplot as plt
import seaborn as sns

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

untuk memutar label 90 derajat.

Robvh
sumber
5

Untuk a seaborn.heatmap, Anda dapat memutar menggunakan ini (berdasarkan jawaban @ 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
sumber
1
ini bekerja untuk saya, hanya lulus dalam rotasi param tidak melakukan apa-apa, saya harus lulus dalam label juga untuk mendapatkan ini berfungsi
Raveen Beemsingh
0

Plot burung laut apa pun yang didukung oleh facetgrid tidak akan berfungsi dengan baik (mis. Catplot)

g.set_xticklabels(rotation=30) 

namun barplot, countplot, dll. akan berfungsi karena tidak didukung oleh facetgrid. Di bawah ini akan bekerja untuk mereka.

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

Juga, jika Anda memiliki 2 grafik yang saling overlay, coba set_xticklabels pada grafik yang mendukungnya.

rishi jain
sumber