如何在seaborn的catplot中旋转xticklabels

9
我无法在Seaborn/Matplotlib中旋转我的x轴标签。我尝试了许多不同的解决方案,但都无法修复它。我在stackoverflow上看到了许多相关的问题,但它们对我没有起作用。
我的当前图表看起来像这样,但我希望x轴标签能旋转90度。

enter image description here

@staticmethod
def plotPrestasjon(plot):
    sns.set(style="darkgrid")
    ax = sns.catplot(x="COURSE", y="FINISH", hue="COURSE",
                     col="BIB#", data=plot, s=9, palette="Set2")
    ax.set(xlabel='COURSES', ylabel='FINISH (sec)')
    plt.show()

我已经尝试过了。
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)

但这样做无法产生情节。有什么办法可以解决这个问题吗?
2个回答

16
  • 根据文档,设置sns.catplot的xticklabels的正确方法是使用.set_xticklabels方法(例如g.set_xticklabels(rotation=30))。

  • 如果需要在每个图中进行更改,则应使用循环遍历Axes,并放置在FacetGrid内。

  • 构建结构化的多图网格

  • seaborn.FacetGrid

  • g,或者在该问题中为ax,是一个seaborn.axisgrid.FacetGrid

    • 当通过ax.axes.flat进行迭代时,axes是一个<class 'matplotlib.axes._subplots.AxesSubplot'>,它具有各种类方法,包括.get_xticklabels()
  • 对于具有许多列且使用了col_wrap=的情况,g.set_xticklabels(rotation=30)可能会导致删除所有xticklabels。

    • 相反,必须指定labels=,例如g.set_xticklabels(g.axes.flat[-1].get_xticklabels(), rotation=30),其中g.axes.flat[-1]应该是具有xticklabels的最后一个facet axes。
  • python 3.11.3matplotlib 3.7.1seaborn 0.12.2中进行了测试

import seaborn as sns

# load data
exercise = sns.load_dataset("exercise")

# plot catplot
g = sns.catplot(x="time", y="pulse", hue="kind", col="diet", data=exercise)

# set rotation
g.set_xticklabels(rotation=30)

enter image description here

使用g.set_xticklabels(g.get_xticklabels(), rotation=30)会导致AttributeError错误。
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-442-d1d39d8cc4f0> in <module>
      1 g = sns.catplot(x="time", y="pulse", hue="kind", col="diet", data=exercise)
----> 2 g.set_xticklabels(g.get_xticklabels(), rotation=30)

AttributeError: 'FacetGrid' object has no attribute 'get_xticklabels'

1
是的,那确实是更合适的解决方案。感谢纠正我! - tania

3
尝试迭代属于FacetGrid的轴:
for axes in ax.axes.flat:
    axes.set_xticklabels(axes.get_xticklabels(), 
                         rotation=90, 
                         horizontalalignment='right')
  • FacetGrid由一组Axes组成,而对于整个“图表”看起来非常直观的某些方法实际上是要在每个单独的Axes上使用的。在文档中搜索Axes。您会发现当它们需要更改与每个单独子图相关的特征时(例如,不是整个图表的图例),它们经常遍历这些轴。

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