在具有共享轴的 seaborn pairplot 中显示 y_ticklabels

Show y_ticklabels in a seaborn pairplot with shared axes

我正在使用 seaborn pairplot 绘制几个自变量与因变量的关系图。

import seaborn as sns
iris = sns.load_dataset("iris")
x_vars = ['sepal_length', 'sepal_width', 'petal_length']
y_vars = ['petal_width']
pp = sns.pairplot(data=iris, x_vars=x_vars, y_vars=y_vars)

现在我想为第二个和第三个子图添加 y 轴刻度和标签。

添加 y 轴标签很容易:

pp.set(ylabel='petal_width')

但我一直想不出如何显示 y_ticklabels。

诸如此类的事情:

pp.set(yticklabels=np.arange(-0.5, 3.01, 0.5))

或:

for i in range(3):
    ax = pp.axes[0,i]
    ax.set_yticks(np.arange(-0.5, 3.01, 0.5))
    ax.set_yticklabels(np.arange(-0.5, 3.01, 0.5))
    ax.set_visible(True)

没有区别。

只需将 yticklabels 变回可见状态即可,在所需的子图中:

import seaborn as sns
iris = sns.load_dataset("iris")
x_vars = ['sepal_length', 'sepal_width', 'petal_length']
y_vars = ['petal_width']
pp = sns.pairplot(data=iris, x_vars=x_vars, y_vars=y_vars)
_ = plt.setp(pp.axes[0,1].get_yticklabels(), visible=True) #changing the 2nd plot

_ = ... 这里是为了在交互环境中抑制不需要的打印输出。

3.0.3 是我的 matplotlib 版本,CT Zhu 的答案对我不起作用,我不知道为什么。

我找到了答案

您可以在所需的子图中使用 tick_params 方法,通过传递 labelleft=True 参数来显示 yticklabels。 (有两种方法)


"""enabling yticklabels for all subplots"""

import seaborn as sns
iris = sns.load_dataset("iris")
x_vars = ['sepal_length', 'sepal_width', 'petal_length']
y_vars = ['petal_width']
pp = sns.pairplot(data=iris, x_vars=x_vars, y_vars=y_vars)

# iterating over all subplots
for ax in pp.axes.flat:
    # labelleft refers to yticklabels on the left side of each subplot
    ax.tick_params(axis='y', labelleft=True) # method 1
    # ax.yaxis.set_tick_params(labelleft=True) # method 2
plt.show()

来自tick_paramsdocs.

Change the appearance of ticks, tick labels, and gridlines.

将 sharey 设置为 False,将给出单独的轴标签 - P.S - 只是分享我的一个用例中的示例代码 -

fig, ax =plt.subplots(1,2,figsize=(15, 5), sharey=False)

fig.suptitle('Sentiment scores - comparison')

sns.countplot(df['Sentiment'], ax=ax[0])

sns.countplot(df['new_sentiment'], ax=ax[1])

fig.show()

输出如下所示 -