Seaborn Factorplotでラベルテキストを回転


152

簡単な因子プロットがあります

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

ここに画像の説明を入力してください

問題は、xラベルがすべて一緒に実行され、判読不能になることです。ラベルが読みやすいようにテキストをどのように回転させるのですか?


29
import matplotlib.pylab as pltplt.xticks(rotation=‌​45)
rafaelvalle

Dexplotライブラリは matplotlibのを使用せずにラベルをラップする機能、TEHフィギュアのサイズを設定し、dpiのすべてを持っています。
Ted Petrou

回答:


137

Amanは、通常のmatplotlibコマンドを使用できることは正しいですが、これも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)

ここに画像の説明を入力してください

これは「機能しない」と主張するコメントと別の回答がありますが、誰でもここに記述されているコードを実行して、機能することを確認できます。他の答えは、アドレスに、それは非常に困難になって、作業が、私の推測では、人々は返す関数の出力にこのソリューションを適用しようとしているということですされていないものの再現性の例として提供していないオブジェクトの代わりに。これらは異なるものであり、メソッドは実際にラベルのリストを必要とし、単にの既存のラベルのプロパティを変更することはできません。教訓は、どのような種類のオブジェクトで作業しているかに注意を払うことが重要であるということです。AxesFacet GridAxes.set_xticklabels()Axes


エラーが表示されます:IndexError:インデックスが多すぎます。私のコード!g = sns.factorplot( "month_date"、 "num_proposals"、 "account"、Sorted_data、col = "account"、col_wrap = 3、sharex = False); g.set_xticklabels(rotation = 30)
yoshiserry 2014

10
@soupault-これは私にとってうまくいきました、あなたが思いついたものに似ていますが、おそらく少しクリーンです-g.axes.flatten()のaxについて:ax.set_xticklabels(ax.get_xticklabels()、rotation = 30)
odedbd

6
ha="right"x軸ラベルを目盛りに中央揃えするために使用します。ieg.set_xticklabels([label1, label2], rotation=30, ha='right')
Manavalan Gajapathy 2017

72
上記のいくつかのコメントと同様に、この回答のおかげで次のように変更g.set_xticklabels(rotation=30)するまで、エラーが発生しg.set_xticklabels(g.get_xticklabels(), rotation=30)ました。stackoverflow.com
Max Power

1
Seabornのプロットメソッドには、FacetGridオブジェクトを返すものと、Matplotlib Axesオブジェクトを返すものがあります。前者の場合はラベルを設定しなくても機能しますが、後者の場合は機能しません。FacetGridドキュメントを見ると、オブジェクトがどれであるかを確認できます:seaborn.pydata.org/api.html。たとえば、これを使用g = sns.catplot()すると機能sns.barplot()しますが、Axesオブジェクトを返すため機能しません。
getup8

252

@mwaskornの回答に問題があった、つまり

g.set_xticklabels(rotation=30)

これもラベルが必要なため、失敗します。@Amanの答えよりも少し簡単です。

plt.xticks(rotation=45)

33
そのようにラベルを取得することもできg.set_xticklabels(g.get_xticklabels(), rotation=30)ます。出力を抑制したい場合は、変数に割り当てます。
joelostblom 2016

3
設定がplt.xticsうまくいったときは、これは正しいと思います。
muammar

上記のバイオリンプロットのすべてのオプションを試してみました。plt.xticks(rotation = n)は、私が作業できる唯一のオプションです
Rob4

29

これはまだmatplotlibオブジェクトです。これを試して:

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

8

clustermap CorrGrids(与えられた海のサンプルの一部)でこれを行う方法を誰かが疑問に思う場合:

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

plt.setp次のように使用することもできます。

import matplotlib.pyplot as plt
import seaborn as sns

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

ラベルを90度回転します。


5

seaborn.heatmapあなたは(に基づいてこれらの使用を回転させることができアマンの答え@

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
これは私にとってはうまくいきました、rotation paramを渡すだけでは何も
起こりませ

0

facetgridでサポートされている海辺のプロットは機能しません(例:catplot)

g.set_xticklabels(rotation=30) 

ただし、barplot、countplotなどはfacetgridでサポートされていないため機能します。以下はそれらのために働くでしょう。

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

また、2つのグラフを重ねて表示する場合は、それをサポートするグラフでset_xticklabelsを試してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.