2017-04-23 136 views
2

我想创建一个数字(> 100)子图进行日后分析。一个高达5x5的网格似乎可以正常工作,任何大于这个值的y轴都会变得非常脆弱,整个事情都是无法读取的。我尝试了各种不同的东西,比如设置方面等,但无济于事。matplotlib:subplots y轴太压扁,pdfpages只输出到一个页面

下面是一个5×50格输出: squashed subplots

这里是我的代码:

from matplotlib.backends.backend_pdf import PdfPages 
pp = PdfPages('./output.pdf') 

num_investigate = len(investigate) 

ncols = 5 
nrows = 50#math.ceil(num_investigate/ncols) 

fig, axs = plt.subplots(nrows=nrows, ncols=ncols, sharex=False, figsize=(15,15)) 


for ax, file in zip(axs.flat, investigate[:(ncols*nrows)]): 
    try: 
     df = get_df_from_csv(file) 
     df['perf'] = df['val']/df['val'].ix[0] - 1 
     #ax.set_ylim(bottom=df['perf'].min(), top=df['perf'].max()) 
     ax.set_aspect('auto') 
     df['perf'].plot(ax=ax, title=file) 
    except: 
     pass 

plt.tight_layout() 
pp.savefig() 
pp.close() 

我在如何经过反复研究解决这个真正的损失。

如何确保每个子图大小不变并且输出到多个pdf页面?

感谢

+1

您是否试图简单地将figsize高度设置为更高的值,例如:'figsize =(15,50)'? – TLousky

+0

是的。我以为figsize是一个绝对数字,所以这应该不会有任何区别 –

回答

1

PdfPages节省一个matplotlib身影一页。第二次调用savefig命令将导致创建第二个页面。因此,如果您希望输出pdf中的第二页,则需要创建第二个数字。

E.g.您可以用5x5的网格生成第一个图形,并将该图形中的前25个图表放入,然后保存。然后创建下一个图,添加下25个图并重新保存。

matplotlib页面上有一个multipage_pdf example

+0

谢谢(我错过了那一点!)。这部分解决了这个问题......是一个matplotlib.figure只能显示最大数量的子图而没有搞乱的总体问题?我看不到任何通过rcParams或类似的方法来改变这一点。 –

+0

不,您可以将任意数量的轴放入图形中(这只受计算机内存限制)。但是最大数字尺寸是50英寸。如果您提供明确的问题描述,则可以肯定地找到解决方案。 – ImportanceOfBeingErnest

+0

我认为问题很清楚:我如何确保每个小区大小不变? –