如何在seaborn catplot中旋转xticklabel

Cma*_*sen 9 python matplotlib seaborn facet-grid catplot

我无法在 Seaborn/Matplotlib 中旋转我的 xlabel。我尝试了很多不同的解决方案,但无法修复它。我在 stackoverflow 上看到了很多相关问题,但它们对我不起作用。

我当前的绘图如下所示,但我希望 xlabel 旋转 90 度。

在此输入图像描述

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

我努力了:

ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
Run Code Online (Sandbox Code Playgroud)

但这无法生成情节。我有什么想法可以解决它吗?

Tre*_*ney 17

  • sns.catplot根据文档,设置 xticklabels 的正确方法是使用.set_xticklabels方法 (.eg g.set_xticklabels(rotation=30))。
  • Axes如果需要在FacetGrid.
  • 构建结构化多图网格
  • seaborn.FacetGrid
  • g,或者在 OP 的情况下,axseaborn.axisgrid.FacetGrid
    • 迭代 时ax.axes.flataxes是 a <class 'matplotlib.axes._subplots.AxesSubplot'>,它具有多种类方法,包括.get_xticklabels().
  • 在有很多列的情况下,col_wrap=使用和g.set_xticklabels(rotation=30)可能会导致删除所有 xticklabel。
    • 相反,labels=必须指定 ,g.set_xticklabels(g.axes.flat[-1].get_xticklabels(), rotation=30)其中g.axes.flat[-1]应该是带有 xticklabels 的最后一个面轴。
    • 或者,使用g.tick_params(axis='x', rotation=30)
  • 测试于python 3.12, matplotlib 3.8.1,seaborn 0.13.0

一行多列

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

在此输入图像描述

多行和多列

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

# set rotation using one of the following options
# g.set_xticklabels(labels=g.axes.flat[-1].get_xticklabels(), rotation=30)
g.tick_params(axis='x', rotation=30)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


  • 在.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'
Run Code Online (Sandbox Code Playgroud)