218

我有一个简单的因子图

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

在此处输入图像描述

问题是 x 标签都一起运行,使它们不可读。如何旋转文本以使标签可读?

4

10 回答 10

355

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

g.set_xticklabels(rotation=30)

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

plt.xticks(rotation=45)
于 2016-01-11T13:02:26.357 回答
205

tick_params您可以使用matplotlibAxes对象上的方法旋转刻度标签。举一个具体的例子:

ax.tick_params(axis='x', rotation=90)
于 2014-10-24T03:02:47.223 回答
36

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

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)
于 2014-10-24T01:46:17.427 回答
12

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

g.set_xticklabels(rotation=30) 

但是 barplot、countplot 等将起作用,因为它们不受 facetgrid 的支持。下面将为他们工作。

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

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

于 2020-07-05T17:13:49.740 回答
11

您也可以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 度。

于 2019-07-03T13:27:46.047 回答
10

如果有人想知道如何为 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()
于 2017-04-06T13:18:41.363 回答
5

对于 a seaborn.heatmap,您可以使用(基于@Aman's answer)旋转这些

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
于 2017-10-31T16:55:49.060 回答
3

One can do this with matplotlib.pyplot.xticks

import matplotlib.pyplot as plt

plt.xticks(rotation = 'vertical')

# Or use degrees explicitly 

degrees = 70  # Adjust according to one's preferences/needs
plt.xticks(rotation=degrees)

Here one can see an example of how it works.

于 2021-04-27T14:20:05.377 回答
1

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

于 2021-05-21T15:02:24.363 回答
0

如果标签的名称很长,则可能很难正确使用。一个对我来说效果很好的解决方案catplot是:

import matplotlib.pyplot as plt
fig = plt.gcf()
fig.autofmt_xdate()
于 2021-03-29T09:04:13.130 回答