在子图中设置副标题和 y 刻度

问题描述 投票:0回答:1

我有两个不同的函数,每个函数都会生成一个图。

list_soal = ['SalePrice', 'GrLivArea', 'GarageArea']

# fig,ax = plt.subplots(1, 3, sharey=True, figsize=(14,4))
def function1(ax):
    for i in range(len(list_soal)):
        plt.suptitle('Histogram for Non-Transfomed Data')    
        sns.histplot(df_train[list_soal[i]], kde=False, stat='density', bins = 30, ax=ax[i])
        sns.kdeplot(df_train[list_soal[i]], ax=ax[i])

# fig,ax = plt.subplots(1, 3, sharey=True, figsize=(14,4))
def function2(ax):
    for i in range(len(list_soal)):
        plt.suptitle('Histogram for Transfomed Data')
        sns.histplot(np.log10(df_train[list_soal[i]]), kde=False, stat='density', bins = 30, ax=ax[i])
        sns.kdeplot(np.log10(df_train[list_soal[i]]), ax=ax[i])

fig,ax = plt.subplots(2, 3, figsize=(20,8), sharey=True)

function1(ax[0])
function2(ax[1])

plt.show()

我想统一每一行的 y 轴。所以我在第17行声明了

sharey=True
。结果如下所示: enter image description here

但是如果我删除第 17 行中的

sharey=True
,它会显示如下: enter image description here

我也在

suptitle
中声明
function2
。但没有显示标题。

我想知道如何设置标题并统一每个函数中每一行的 y 轴。

python matplotlib seaborn subplot
1个回答
0
投票

不要设置

sharey=True
,而是设置
sharey='row'
。这将告诉 matplotlib 每行子图应该共享一个 y 轴。

fig, ax = plt.subplots(2, 3, figsize=(20,8), sharey='row')

来自文档

sharexsharey

bool
{'none', 'all', 'row', 'col'}
,默认:
False

控制 x (

sharex
) 或 y (
sharey
) 轴之间的属性共享:

True
'all'
:x 轴或 y 轴将在所有子图之间共享。

False
'none'
:每个子图 x 轴或 y 轴都是独立的。

'row'
:每个子图行将共享一个 x 轴或 y 轴。

'col'
:每个子图列将共享一个 x 轴或 y 轴。

当子图沿列具有共享 x 轴时,仅创建底部子图的 x 刻度标签。同样,当子图沿行具有共享 y 轴时,仅创建第一列子图的 y 刻度标签。要稍后打开其他子图的刻度标签,请使用tick_params。

当子图具有带单位的共享轴时,调用

Axis.set_units
将使用新单位更新每个轴。

请注意,无法取消共享轴。

© www.soinside.com 2019 - 2024. All rights reserved.