Python 每行Matplotlib的y比例不同

Python 每行Matplotlib的y比例不同,python,matplotlib,Python,Matplotlib,我正在尝试动态缩放每行子地块的y轴,因此我想我应该为使用for循环创建的每个子地块手动定义ymax fig, ax = plt.subplots(3, len(motif.strip()), figsize=(15, 10), sharex=True, sharey=True) for i, s in enumerate(dataw.pos.unique()): for j, r in enumerate(dataw.type.sort_values().unique(

我正在尝试动态缩放每行子地块的y轴,因此我想我应该为使用for循环创建的每个子地块手动定义ymax

fig, ax = plt.subplots(3, len(motif.strip()), figsize=(15, 10), sharex=True, sharey=True)

    for i, s in enumerate(dataw.pos.unique()):
        for j, r in enumerate(dataw.type.sort_values().unique()):
            atmp = dataw[(dataw.pos == s) & (dataw.type == r)]
            btmp = dataw[(dataw.type == r)]
            ymax = (btmp['values'].values).max()
            #print(btmp)
            #print(ymax)
            tmp = [atmp[atmp['base'] == 'A']['values'].values,
                   atmp[atmp['base'] == 'G']['values'].values,
                   atmp[atmp['base'] == 'T']['values'].values,
                   atmp[atmp['base'] == 'C']['values'].values]

            ax[j][i].violinplot(tmp)
            ax[j][i].set_ylim([0, ymax])

            #ax[j][i].set(xlabel='base',
            #             ylabel='values',
            #             title=s + '--' + r)

    fig.tight_layout()

    fig.savefig(str(graph) + ".png")
我现在所拥有的:

我想要的(注意每行的y轴不同):


手动设置
ylim
在您的案例中不起作用,即
sharey=True
。如果将其设置为False,则可以为每个绘图设置
ylim
(每个绘图使用单独的y记号)

由于您似乎希望每行共享一个y,因此必须计算每行的最大值,并将其设置在内部循环之外。然后,您可以隐藏每行中除第一个绘图外的所有绘图的刻度:
ax.set\u yticks([])

更新

我不知道在我编写原始答案时是否存在此功能,我只是不知道它,但今天实现此功能的正确方法是在调用
子地块
函数时使用:
sharey='row'
。有关更多详细信息,请参阅