使用matplotlib在一个pdf页面图中显示多个子图

时间:2015-07-29 12:35:16

标签: python-2.7 pdf matplotlib subplot

我知道问题已经被提出,但我试图用不同的解决方案来改变我的代码,这里和那里没有成功。

我想报告多个pdf页面,每页都有多个图表,这里是第一页的一段代码,它不完整,但其余部分用不同的绘图以相同的方式编写。 我首先尝试使用subplot2grid方法,然后使用基本图和子图方法。我可以看到绘制了子图,但似乎最终的pdf只包含了最后一个子图,所以我猜这个问题来自子图节省吗?

protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
    return false;
}

这是我最后一次使用“fig.add_subplot()”方法的尝试,但我得到了奇怪的空白数字

from matplotlib.backends.backend_pdf import PdfPages
with PdfPages('Rapport_criblage.pdf') as pdf_pages:

plt.figure(figsize=(8.27, 11.69), dpi=100)

plt.subplot(421)  

moyenne_ratio=[]
moyenne_ratio.append(etu_ratio_ctrlpos[0])
moyenne_ratio.append(etu_ratio_ctrlneg[0])

SD_ratio=[]
SD_ratio.append(etu_ratio_ctrlpos[1])
SD_ratio.append(etu_ratio_ctrlneg[1])

pos = numpy.arange(2)
width = 1.0     # gives histogram aspect to the bar diagram
ax1 = plt.axes()
ax1.set_xticks(pos + (width / 2))
ax1.set_xticklabels("+-")
plt.bar(pos, moyenne_ratio, width, color='b',yerr=SD_ratio) 

txt_r=" RATIO \n cellules+tampon: \n moyenne          ecart-type          CV \n"+ \
    str(etu_ratio_ctrlneg)+"\n"+ \
    "cellules+OT: \n moyenne          ecart-type          CV \n"+ \
    str(etu_ratio_ctrlpos)+"\n"+ \
    "Z: "+str(Zpos_vs_neg_ratio)

ax1.text(0.1,0.1,txt_r,horizontalalignment='left',verticalalignment='center',transform = ax1.transAxes)   

plt.subplot(422)
ratio_max_basal=[]
puits=[]
for l in ctrlneg:
    ratio_max_basal.append(l[5])
    puits.append(l[7])

pos = numpy.arange(len(ratio_max_basal))
width = 1.0     # gives histogram aspect to the bar diagram
ax2 = plt.axes()
ax2.set_xticks(pos + (width / 2))
ax2.set_xticklabels(puits)
plt.bar(pos, ratio_max_basal, width, color='b') 

pdf_pages.savefig()

我从matplotlib开始,也许这很明显,但我不明白。提前谢谢。

1 个答案:

答案 0 :(得分:2)

以下内容适用于创建2页pdf,第1页有2个子图,第2页有3个子图。也许您需要在第二个示例中写完所有数字后调用pdf_pages.close()

from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt 

pp = PdfPages('multipage.pdf')

fig=plt.figure()
ax1=fig.add_subplot(211)
ax2=fig.add_subplot(212)

pp.savefig(fig)

fig2=plt.figure()
ax1=fig2.add_subplot(311)
ax2=fig2.add_subplot(312)
ax3=fig2.add_subplot(313)

pp.savefig(fig2)

pp.close()

enter image description here