在新窗口中显示每个matplotlib图

时间:2020-05-10 05:14:54

标签: python python-3.x list matplotlib

我创建了一个代码,可以根据坐标向我显示图形。

import matplotlib.pyplot as plt 

draws = [['4X13' , 0.105,  0.103,  0.008,  0.007,  0.088],
        ['5X16'  , 0.127,  0.127,  0.009,  0.006,  0.108],
        ['5X19'  , 0.130,  0.127,  0.010,  0.006,  0.108],
        ['6X8.5' , 0.148,  0.100,  0.004,  0.004,  0.138],
        ['6X9'   , 0.149,  0.100,  0.005,  0.004,  0.138],
        ['6X12'  , 0.153,  0.101,  0.007,  0.005,  0.138]]

for i in range(len(draws)):   
    xi_down = 0
    yi_down = 0
    xf_down = draws[i][2]
    yf_down = 0

    xi_up = 0
    yi_up = draws[i][1]
    xf_up = draws[i][2]
    yf_up = draws[i][1]


    xi_mid = draws[i][2]/2
    yi_mid = 0
    xf_mid = draws[i][2]/2
    yf_mid = draws[i][1]

    plt.plot((xi_down, xf_down), (yi_down, yf_down), linewidth = draws[i][3]*1000)
    plt.plot((xi_up, xf_up), (yi_up, yf_up), linewidth = draws[i][3]*1000)
    plt.plot((xi_mid, xf_mid), (yi_mid, yf_mid), linewidth = draws[i][4]*1000)

    plt.title('P W '+draws[i][0])
    plt.axis('equal')

    plt.show()

问题是每个图形都彼此重叠,我想要的是将它们显示在单独的窗口中,如下所示:

images_result

一种解决方法是再次为列表中的每一行调用plot方法,但我认为这样效率不高,有没有更好的方法?

谢谢

1 个答案:

答案 0 :(得分:0)

您只需在每次迭代的开始添加以下行:

for i in range(len(draws)):
    plt.figure()
    ...

如果要查看所有图已打开,请从循环中删除以下行:

plt.show()

这将生成一个图形对象,并且在每次迭代中使用绘图时,它将显示在不同的窗口中。

生成6个绘图图形的整个代码为:

import matplotlib.pyplot as plt

draws = [['4X13' , 0.105,  0.103,  0.008,  0.007,  0.088],
        ['5X16'  , 0.127,  0.127,  0.009,  0.006,  0.108],
        ['5X19'  , 0.130,  0.127,  0.010,  0.006,  0.108],
        ['6X8.5' , 0.148,  0.100,  0.004,  0.004,  0.138],
        ['6X9'   , 0.149,  0.100,  0.005,  0.004,  0.138],
        ['6X12'  , 0.153,  0.101,  0.007,  0.005,  0.138]]

for i in range(len(draws)):
    plt.figure()
    xi_down = 0
    yi_down = 0
    xf_down = draws[i][2]
    yf_down = 0

    xi_up = 0
    yi_up = draws[i][1]
    xf_up = draws[i][2]
    yf_up = draws[i][1]


    xi_mid = draws[i][2]/2
    yi_mid = 0
    xf_mid = draws[i][2]/2
    yf_mid = draws[i][1]

    plt.plot((xi_down, xf_down), (yi_down, yf_down), linewidth = draws[i][3]*1000)
    plt.plot((xi_up, xf_up), (yi_up, yf_up), linewidth = draws[i][3]*1000)
    plt.plot((xi_mid, xf_mid), (yi_mid, yf_mid), linewidth = draws[i][4]*1000)

    plt.title('P W '+draws[i][0])
    plt.axis('equal')

plt.show()