我正在使用pandas和matplotlib来绘制来自涉及5个会话的实验的数据。我希望每个会话的数据都显示在一个单独的面板中;我试图使用子图来做到这一点。
我使用下面的代码几乎拥有我想要的东西(参见示例图:http://imgur.com/99nK2TR)。问题是不同的会话具有不同的试验次数,并且当我绘制时,不同的面板的比例会发生变化。我希望所有图中的比例相同,并且要调整子图边界框的大小。具体而言,试验应在所有面板上间隔相等,因此面板S1和S2b(每个包含12个试验)将比面板S2a,S3a和S3b(每个包含3个试验)更宽。
我想我可能不得不使用方面和/或可调整和/或sharex的某些组合,但我无法理解如何......
对于伪劣编码的道歉我是新的=)
fig,([ax1,ax2,ax3,ax4,ax5]) = plt.subplots(1, 5, sharey=True)
dfsubset1.plot(xticks=range(1,13,1), xlim=[0,13], ylim=[0,35], ax=ax1, title='S1', figsize=(12, 6), style='o-', legend=False)
dfsubset2.plot(xticks=range(1,4,1), xlim=[0,4], ylim=[0,35], ax=ax2, title='S2a', figsize=(12, 6), style='o-', legend=False)
dfsubset3.plot(xticks=range(1,13,1), xlim=[0,13], ylim=[0,35], ax=ax3, title='S2b', figsize=(12, 6), style='o-', legend=False)
dfsubset4.plot(xticks=range(1,4,1), xlim=[0,4], ylim=[0,35], ax=ax4, title='S3a', figsize=(12, 6), style='o-', legend=False)
dfsubset5.plot(xticks=range(1,4,1), xlim=[0,4], ylim=[0,35], ax=ax5, title='S3b', figsize=(12, 6), style='o-', legend=False)
答案 0 :(得分:1)
有几种方法可以做到这一点。我们假设你 将数据读入不同的数据帧:
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, subplots=True)