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

时间:2015-06-27 23:05:54

标签: python matplotlib seaborn

我正在使用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)

enter image description here

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

添加y轴标签很简单:

pp.set(ylabel='petal_width')

enter image description here

但我不能为我的生活弄清楚如何展示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)

没有区别。

2 个答案:

答案 0 :(得分:3)

只需将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

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

答案 1 :(得分:0)

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

我找到了答案 here

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


"""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()

enabling yticklabels for shared axes

来自tick_params docs

  

更改刻度线,刻度线标签和网格线的外观。