在seaborn中旋转标签文本

287 投票
9 回答
490577 浏览
提问于 2025-04-29 09:34

我有一个简单的因子图

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

在这里输入图片描述

问题是,x轴上的标签都挤在一起了,导致看不清楚。请问怎么旋转这些文字,让标签变得可读呢?

暂无标签

9 个回答

13

如果有人想知道如何为聚类图的相关性网格(这是一个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()
22

任何可以用facetgrid显示的seaborn图表都无法与(例如catplot)一起使用。

g.set_xticklabels(rotation=30) 

不过,像barplot、countplot这些图表就可以用,因为它们不受facetgrid的限制。下面的代码可以用来处理这些图表。

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

另外,如果你有两个图重叠在一起,可以尝试在支持这个功能的图上使用set_xticklabels。

37

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

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

我遇到了一个问题,关于@mwasorn的回答,具体是

g.set_xticklabels(rotation=30)

这个代码不行,因为它还需要标签。比起@Aman的回答,这个方法简单一点,只需要加上

plt.xticks(rotation=45)
276

你可以通过在matplotlib的Axes对象上使用tick_params方法来旋转刻度标签。下面是一个具体的例子:

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

撰写回答