如何在Seaborn PairGrid中*旋转*标签?

3

我的数据框中的列名很长,所以当我制作成对图时,标签会重叠在一起。我想将我的标签旋转90度,以便它们不会相互碰撞。我尝试在线查找和文档,但无法找到解决方案。这是我写的内容及其错误信息:

plt.figure(figsize=(10,10))
g = sn.pairplot(df, kind="scatter")
g.set_xticklabels(g.get_xticklabels(), rotation=90)
g.set_yticklabels(g.get_yticklabels(), rotation=90)

AttributeError: 'PairGrid' object has no attribute 'set_xticklabels'

如何在 Seaborn PairGrid 中旋转标签(x 和 y 轴)?

注:抱歉,由于我的 wifi 无法上传图片进行参考。

3个回答

11

感谢William的回答,现在我知道该找什么来解决我的问题了!

以下是我的解决方法。

g = sn.pairplot(dfsub.sample(50), kind="scatter", hue=target)
for ax in g.axes.flatten():
    # rotate x axis labels
    ax.set_xlabel(ax.get_xlabel(), rotation = 90)
    # rotate y axis labels
    ax.set_ylabel(ax.get_ylabel(), rotation = 0)
    # set y labels alignment
    ax.yaxis.get_label().set_horizontalalignment('right')

4

在 @techtana 的答案基础上补充。如果在绘制 pairplot 时设置 cornor=True,那么您需要跳过 NoneTypeax

g = sns.pairplot(df, diag_kind='kde', corner=True)
for ax in g.axes.flatten():
    if ax:
        # rotate x axis labels
        ax.set_xlabel(ax.get_xlabel(), rotation = -30)
        # rotate y axis labels
        ax.set_ylabel(ax.get_ylabel(), rotation = 0)
        # set y labels alignment
        ax.yaxis.get_label().set_horizontalalignment('right')

4
您可以直接使用PairPlot返回的PairGrid对象成员axes来迭代轴。类似这样:
for ax in g.axes.flatten():
    ax.tick_params(rotation = 90)

应该可以解决。

谢谢@William!通过g.axes.flatten()迭代正是我所需要的!实际上,我正在处理标签而不是tick_params,所以我进行了编辑并为此问题添加了一个新答案。 - techtana
1
@TechTana 抱歉,你在问题中使用 get_xticklabels()get_yticklabels() 让我误以为你想要旋转刻度标签而不是轴标签 - 而 tick_params() 是另一种方法。我很高兴你能用上 g.axes.flatten() - William Miller

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