在seaborn中旋转标签文本

问题描述 投票:0回答:9

我有一个简单的因子图

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

问题在于 x 标签全部运行在一起,导致它们不可读。如何旋转文本以使标签可读?

python matplotlib seaborn x-axis
9个回答
437
投票

我对@mwaskorn 的答案有疑问,即

g.set_xticklabels(rotation=30)

失败,因为这也需要标签。比 @Aman 的答案更简单的是添加

plt.xticks(rotation=30)

277
投票

您可以使用 matplotlib

tick_params
对象上的
Axes
方法旋转刻度标签。提供一个具体的例子:

ax.tick_params(axis='x', rotation=90)

37
投票

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

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

24
投票

facetgrid 支持的任何 seaborn 绘图都无法使用(例如 catplot)

g.set_xticklabels(rotation=30) 

但是,条形图、计数图等可以工作,因为它们不受facetgrid 支持。以下将对他们有用。

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

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


14
投票

您还可以使用

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 度。


13
投票

如果有人想知道如何对 clustermap 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()

8
投票

对于

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

3
投票

如果标签名称很长,可能很难正确理解。使用

catplot
对我来说效果很好的解决方案是:

import matplotlib.pyplot as plt
fig = plt.gcf()
fig.autofmt_xdate()

1
投票

使用

ax.tick_params(labelrotation=45)
。您可以将其应用于图中的轴图,而无需提供标签。如果这不是您想要采用的路径,那么这是使用 FacetGrid 的替代方法。

© www.soinside.com 2019 - 2024. All rights reserved.