在seaborn factorplot中旋转标签文本

dan*_*dan 121 matplotlib seaborn

我有一个简单的factorplot

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

在此输入图像描述

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

Gij*_*ijs 210

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

g.set_xticklabels(rotation=30)
Run Code Online (Sandbox Code Playgroud)

失败,因为这也需要标签.比@Aman的答案容易一点就是添加

plt.xticks(rotation=45)
Run Code Online (Sandbox Code Playgroud)

  • 你也可以得到像这样的标签`g.set_xticklabels(g.get_xticklabels(),rotation = 30)`.如果要抑制输出,请将其分配给变量. (30认同)
  • 我建议还添加 `plt.tight_layout()`,以便调整边距以适合文本 (3认同)
  • `g.set_xticklabels(rotation=30)` 现在适用于 `FacetGrid` (3认同)
  • 我认为这是正确的,当设置`plt.xtics`对我有用时。 (2认同)

mwa*_*kom 113

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有一些评论和另一个答案声称这"不起作用",但是,任何人都可以运行这里编写的代码并看到它确实有效.另一个答案没有提供一个可重复的例子,说明什么不起作用,这使得它很难解决,但我的猜测是人们试图将这个解决方案应用于返回一个Axes对象而不是一个对象的函数的输出Facet Grid.这些是不同的东西,并且该Axes.set_xticklabels()方法确实需要标签列表,并且不能简单地改变现有标签的属性Axes.经验教训是,注意您正在使用的对象类型非常重要.

  • 类似于上面的一些评论,这给了我一个错误,直到我将`g.set_xticklabels(rotation = 30)`更改为`g.set_xticklabels(g.get_xticklabels(),rotation = 30)`感谢这个答案:https:/ /stackoverflow.com/a/39689464/1870832 (54认同)
  • @soupault - 这对我有用,类似于你提出的但可能更清洁 - 对于g.axes.flatten()中的斧头:ax.set_xticklabels(ax.get_xticklabels(),rotation = 30) (9认同)
  • 使用"ha ="right"`将x轴标签对齐到它们的刻度线.即`g.set_xticklabels([label1,label2],rotation = 30,ha ='right')` (5认同)

Ama*_*man 28

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

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)
Run Code Online (Sandbox Code Playgroud)


Rob*_*bvh 10

您还可以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)
Run Code Online (Sandbox Code Playgroud)

将标签旋转 90 度。


ris*_*ain 9

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

g.set_xticklabels(rotation=30) 
Run Code Online (Sandbox Code Playgroud)

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

g.set_xticklabels(g.get_xticklabels(), rotation=30)
Run Code Online (Sandbox Code Playgroud)

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


小智 5

如果有人想知道如何对集群图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()
Run Code Online (Sandbox Code Playgroud)


ser*_*inc 5

对于 a 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
Run Code Online (Sandbox Code Playgroud)