Python 具有可变宽度/数据限制的matplotlib子批次

Python 具有可变宽度/数据限制的matplotlib子批次,python,matplotlib,plot,pandas,Python,Matplotlib,Plot,Pandas,我使用pandas和matplotlib绘制了一个涉及5个会话的实验数据。我想在一个单独的面板中显示每个会话的数据;我正在尝试使用子绘图来实现这一点 使用下面的代码,我几乎得到了我想要的(参见这里的示例图:)。问题是,不同的课程有不同的试验次数,当我绘图时,不同小组的比例也会改变。我希望所有绘图中的比例都相同,而子绘图边界框的大小需要调整。具体而言,试验应在所有面板上均匀分布,因此面板S1和S2b(各包含12个试验)将比面板S2a、S3a和S3b(各包含3个试验)宽 我想我可能不得不使用aspe

我使用pandas和matplotlib绘制了一个涉及5个会话的实验数据。我想在一个单独的面板中显示每个会话的数据;我正在尝试使用子绘图来实现这一点

使用下面的代码,我几乎得到了我想要的(参见这里的示例图:)。问题是,不同的课程有不同的试验次数,当我绘图时,不同小组的比例也会改变。我希望所有绘图中的比例都相同,而子绘图边界框的大小需要调整。具体而言,试验应在所有面板上均匀分布,因此面板S1和S2b(各包含12个试验)将比面板S2a、S3a和S3b(各包含3个试验)宽

我想我可能不得不使用aspect和/或adjustable和/或sharex的一些组合,但我不知道如何

为粗制滥造的编码道歉我是新的=)


有几种方法可以做到这一点。假设您必须将数据读入单独的数据帧:

all_df = [df1, df2, ..., dfN]
fig, axes = plt.subplots(ncols=len(all_df), sharey=True)
for df, ax in zip(all_df, axes):
    df.plot(ax=ax)
您可以将x限制和标题放在列表(列表)中,并将它们压缩到循环中,尽管我强烈建议您从循环中的数据帧计算它们。如果
sharey=True
,则设置y限制没有意义


如果您实际上能够将所有数据放在同一数据帧的各个列中,那么它可能会像
bigdf.plot(x='xcol',sharey=True,subplot=True)

您好,谢谢您的帮助。事后看来,我应该更清楚地了解我正在使用的数据帧-我试图简化上面的示例,但它有点复杂,因此我正在努力实现您的建议。df有一个层次索引,请参见:当我尝试按照您的步骤操作时,我只是得到一系列长度相同的垂直子图。曲线图需要水平-显示实验的时间进程-并达到适当的宽度(即S1中的12次试验,S2a中的3次试验等)。希望这更清楚…这里有一个类似于我刚才在ggplot2中所做的事情:注意,在这种情况下,会话3a和3b被折叠。@user3408208您确实需要发布一些数据和一个简单的工作示例。我仍然不明白这一切是否都在一个大数据框架内。下面是一个示例,说明在您不确定的情况下如何将数据包含在最小的工作示例中:
all_df = [df1, df2, ..., dfN]
fig, axes = plt.subplots(ncols=len(all_df), sharey=True)
for df, ax in zip(all_df, axes):
    df.plot(ax=ax)