如何在seaborn的箱线图中旋转xtick标签?

50

我有一个问题,基本上与2014年的一个问题相同(请参见这里)。不过,我的脚本仍然会抛出一个错误。

我做的是这样的:我有一个带有几列的Pandas数据框。我绘制了一个简单的箱线图比较。

g = sns.boxplot(x='categories', y='oxygen', hue='target', data=df)
g.set_xticklabels(rotation=30)

这个图看起来是这样的:

enter image description here

我想将x轴标签旋转30度,因此我使用g.set_xticklabels(rotation=30)。然而,我遇到了以下错误:

set_xticklabels()缺少1个必需的位置参数:'labels'

我不知道如何将 matplotliblabels 参数传递给seaborns的sns.boxplot。有什么想法吗?

2个回答

87

你链接的问题使用了一个factorplot。一个factorplot返回自己的类,其中有一个名为set_xticklabels(rotation)的方法。这不同于matplotlib Axesset_xticklabels方法。

在链接问题的答案中,还有其他选项可供使用。

ax = sns.boxplot(x='categories', y='oxygen', hue='target', data=df)
ax.set_xticklabels(ax.get_xticklabels(),rotation=30)
ax = sns.boxplot(x='categories', y='oxygen', hue='target', data=df)
plt.setp(ax.get_xticklabels(), rotation=45)

1
谢谢,你有没有想法为什么 myplot.set_xticklabels(myplot.get_xticklabels(), rotation=45) 不起作用,但是 plt.setp(myplot.get_xticklabels(), rotation=45) 起作用了? - Medhat
4
也许我表达不够清楚。第二个答案在我使用时有效,而第一个会使标签消失。 - Medhat
1
这两种解决方案在我使用它们时都有效。我想你遇到的问题可能不在这里显示的这两行代码之内。 - ImportanceOfBeingErnest
2
嗨,非常感谢@ImportanceOfBeingErnest的好建议!你知道为什么我的图下面总是出现一大段文本吗?我的箱线图没问题,输出也完全正常,但是我却得到了几行标签,例如 [Text(0, 0, '1984'), Text(0, 0, '1985'), - dekio
3
@dekio 在这行末尾加上分号; - Noa Yehezkel

5
如果您不需要重置标签: ax.tick_params(axis='x', labelrotation=90)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接