如何在seaborn中设置子图的标题和ylims

Roc*_*etq 3 python matplotlib python-3.x pandas seaborn

我有这样的代码,它绘制了 2 个子图。我想为两个子图设置 ylim 和标题,但它仅适用于最后一个子图。

   TREATMENTINSTIDs = atg_cg.TREATMENTINSTID.unique()
    sn.set_style('ticks')
    fig, ax = plt.subplots(nrows = 2,ncols = 1)
    fig.set_size_inches(10, 12)
    i = 0
    #plt.title(TREATMENTINSTID)

    for TREATMENTINSTID in TREATMENTINSTIDs:
        plt.title(TREATMENTINSTID)
        plt.ylim(0, 1000)
        sn.violinplot(x="group_type", y="arpu" , hue = 'isSMS',ax=ax[i],cut=0, 
                      data=atg_cg[atg_cg.TREATMENTINSTID == TREATMENTINSTID],inner="quartile", split=True, title = TREATMENTINSTID)
        sn.despine(left=True)
        i = i + 1
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这里有什么问题吗?为什么第一个子图漂浮或翱翔在 x 轴上方?

Dav*_*idG 8

您可能想使用面向对象的 API 设置轴对象本身的标题和限制。这意味着您可以控制单个子图上的标题等,这比plt.title使用多个子图更容易:

创建图窗时,您已经拥有了坐标区对象fig, ax = plt.subplots(nrows = 2,ncols = 1)set_title因此,使用和修改 title 和 ylim 的设置set_ylim

你的代码变成:

TREATMENTINSTIDs = atg_cg.TREATMENTINSTID.unique()
sn.set_style('ticks')
fig, ax = plt.subplots(nrows=2, ncols=1)
fig.set_size_inches(10, 12)
i = 0
# plt.title(TREATMENTINSTID)

for TREATMENTINSTID in TREATMENTINSTIDs:
    ax[i].set_title(TREATMENTINSTID)
    ax[i].set_ylim(0, 1000)
    sn.violinplot(x="group_type", y="arpu", hue='isSMS', ax=ax[i], cut=0,
                  data=atg_cg[atg_cg.TREATMENTINSTID == TREATMENTINSTID], inner="quartile", split=True,
                  title=TREATMENTINSTID)
    sn.despine(left=True)
    i = i + 1
Run Code Online (Sandbox Code Playgroud)