在python3中同时制作多个图

时间:2019-08-22 12:00:48

标签: python-3.x for-loop plot

我有一个列表和一个像下面两个例子一样的python数组:

示例:

Neg = [37.972200755611425, 32.14963079785344]

Pos = array([[15.24373185, 13.66099865, 11.86959384,  9.72792045,  7.12928302, 6.04439412],[14.5235007 , 13.        , 11.1792871 ,  9.14974712,  6.4429435 , 5.04439412]

NegPos都有2个元素(在此示例中),因此我想为每个元素绘制2个单独的图(pdf file)。 在每个情节中都会有2行: 1-来自Pos,基本上是一个折线图,由子列表中的所有元素组成。 2-来自Neg,是y轴上的一条水平线。

我正在尝试同时在for循环中为所有元素执行此操作。为此,我在python中制作了以下代码,但未返回我想要的内容。你知道如何解决吗?

for i in range(len(Neg)):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(concentration, Pos[i], label='gg')
    plt.axhline(y=Neg[i], color='b', linestyle='-')
    ax.legend()
    ax.set_xlabel("log2 concentration")
    ax.set_ylabel("log2 raw counts")
    ax.set_ylim(0, 40)
    plt.savefig(f'{i}.pdf')

1 个答案:

答案 0 :(得分:0)

不太清楚您想要什么,但是此代码按照我认为的描述方式创建了数据的两个子图:

import numpy as np
from matplotlib import pyplot as plt

Neg = [37.972200755611425, 32.14963079785344]
Pos = np.array([[15.24373185, 13.66099865, 11.86959384,  9.72792045,  7.12928302, 6.04439412],[14.5235007 , 13.        , 11.1792871 ,  9.14974712,  6.4429435 , 5.04439412]])

fig = plt.figure()
for i in range(len(Neg)):
    ax = fig.add_subplot(2,1,i+1)
    ax.plot(Pos[i], label='gg')
    plt.axhline(y=Neg[i], color='b', linestyle='-')
    ax.legend()
    ax.set_xlabel("log2 concentration")
    ax.set_ylabel("log2 raw counts")
    ax.set_ylim(0, 40)
    plt.subplots_adjust(hspace=1.0)

    extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
    fig.savefig(f'{i}.pdf', bbox_inches=extent.expanded(1.2, 1.9))

编辑了该代码,以通过抓取该图的特定部分进行保存来分别将每个子图保存到文件中,如本问题中所述:Save a subplot in matplotlib

还可以通过调用subplots_adjust()在每个子图之间添加一些额外的间距,以便可以将每个子图保存到单独的文件中,而不会包含其他子图的任何细节。这可能不是您想要做的最好的方法,但是我认为它现在可以做您想要的。

或者,如果您不打算使用子图,则始终可以按元素使用图:

fig = plt.figure()
for i in range(len(Neg)):
    plt.plot(Pos[i], label='gg')
    plt.axhline(y=Neg[i], color='b', linestyle='-')
    plt.legend()
    plt.xlabel("log2 concentration")
    plt.ylabel("log2 raw counts")
    plt.ylim(0, 40)
    fig = plt.gcf()
    fig.savefig(f'{i}.pdf')          
    plt.show()