在Seaborn因子图中旋转标签文本


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 '16

Dexplot库能够包装标签,设置德的数字大小,新闻部都没有使用matplotlib的能力。
特德·佩特鲁

Answers:


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)

在此处输入图片说明

有一些评论和另一个答案声称此“无效”,但是,任何人都可以按照此处编写的代码运行,并查看它是否有效。对方的回答并没有提供什么不工作,从而解决这一问题很难重复的例子,但我的猜测是,人们正试图将此解决方案的返回函数的输出Axes对象,而不是一个Facet Grid。这些是不同的事情,该Axes.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.set_xticklabels(ax.get_xticklabels(),rotation = 30)
odedbd

6
用于ha="right"将x轴标签对齐到其刻度线。即g.set_xticklabels([label1, label2], rotation=30, ha='right')
Manavalan Gajapathy

72
类似于上面的一些评论,这给了我一个错误,直到我由于以下答案而更改g.set_xticklabels(rotation=30)g.set_xticklabels(g.get_xticklabels(), rotation=30)stackoverflow.com/a/39689464/1870832
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 '16

3
当设置plt.xtics对我有用时,我认为这是正确的。
muammar

尝试了上面所有的小提琴选择,而plt.xticks(rotation = n)只是我可以上班的选择
Rob4

29

这仍然是matplotlib对象。试试这个:

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

8

如果有人想知道如何对集群图CorrGrids进行此操作(给定的seaborn示例的一部分):

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,您可以使用(根据@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

1
这对我
有用

0

Facetgrid支持的所有海底图都无法使用(例如catplot)

g.set_xticklabels(rotation=30) 

但是bartlot,countplot等将可以使用,因为facetgrid不支持它们。下面将为他们工作。

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

另外,如果您有2个图形相互重叠,请尝试在支持该图形的图形上使用set_xticklabels。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.