为所有网格设置 xticklabels,用于使用 col_wrap [重复] 使用seaborn catplot 创建的绘图

2023-12-14

我使用以下方法创建了一个绘图:

g = sns.catplot(x='loja', y='preco', col='Descr. Grupo', col_wrap=3, capsize=.2, height=4, aspect=1.2,
            kind='point', sharey=False, data=df_long)

该图构建了 10 个网格,但只有最后 3 个网格具有xticklabels我想要的。
我们可以看到如下:

for ax in g.axes:
    print(ax.get_xticklabels())   
<a list of 0 Text major ticklabel objects>
<a list of 0 Text major ticklabel objects>
<a list of 0 Text major ticklabel objects>
<a list of 0 Text major ticklabel objects>
<a list of 0 Text major ticklabel objects>
<a list of 0 Text major ticklabel objects>
<a list of 0 Text major ticklabel objects>
<a list of 3 Text major ticklabel objects>
<a list of 3 Text major ticklabel objects>
<a list of 3 Text major ticklabel objects>

作为专栏loja有 3 个不同的类别,我希望有 3 个xticklabels对于每个网格。

所以我尝试这样做:

for ax in g.axes:
    ax.set_xticklabels(['a', 'b', 'c'], visible=True, rotation=0)

现在xticklabels已创建,但出现了意外的行为:标签也出现在每个网格的顶部。

我怎样才能只保留xticklabels从每个网格的底部?


Setting ax.tick_params(labelbottom=True)似乎解决了问题。可能你需要plt.subplots_adjust(...)加宽一些填充物。

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df_long = pd.DataFrame({'loja': np.random.randint(1, 4, 200),
                        'preco': np.random.randn(200).cumsum() + 100,
                        'Descr. Grupo': np.random.randint(1, 6, 200)})
g = sns.catplot(x='loja', y='preco', col='Descr. Grupo', col_wrap=3, capsize=.2, height=3, aspect=1.2,
                kind='point', sharey=False, data=df_long)
for ax in g.axes:
    ax.set_xticklabels(['A', 'B', 'C'], rotation=0)
    ax.tick_params(labelbottom=True)
plt.subplots_adjust(bottom=0.1, left=0.06, hspace=0.2)
plt.show()

example plot

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为所有网格设置 xticklabels,用于使用 col_wrap [重复] 使用seaborn catplot 创建的绘图 的相关文章