Python 在for循环的每个步骤中将多个五边形保存为图像

Python 在for循环的每个步骤中将多个五边形保存为图像,python,for-loop,matplotlib,Python,For Loop,Matplotlib,我需要在每一步保存4个五边形作为图像,但它会在上一步保存每个图像。我需要每个图像包括一个单独的多边形 import numpy as np import matplotlib.pyplot as plt pixels = 600 my_dpi = 100 num_geo=3 coord = np.array([[[-150, -200], [300, -200], [300, 0], [150, 200], [-150, 200]], [[-300, -2

我需要在每一步保存4个五边形作为图像,但它会在上一步保存每个图像。我需要每个图像包括一个单独的多边形

import numpy as np
import matplotlib.pyplot as plt

pixels = 600
my_dpi = 100
num_geo=3

coord = np.array([[[-150, -200], [300, -200], [300, 0], [150, 200], [-150, 200]],
                  [[-300, -200], [200, -300], [200, -50], [200, 300], [-150, 200]],
                  [[-140, -230], [350, -260], [350, 0], [140, 200], [-180, 220]],
                  [[-180, -240], [370, -270], [370, 0], [170, 200], [-190, 230]]])


fig = plt.figure(num_geo,figsize=( pixels/my_dpi,  pixels/my_dpi),facecolor='k', dpi=my_dpi)  


plt.axes([0,0,1,1])

rectangle = plt.Rectangle((-300, -300), 600, 600, fc='k')
plt.gca().add_patch(rectangle)



for i in range(4):

    geo = coord[i, :, :]
    print(coord[i])

    polygon = plt.Polygon(coord[i],color='w')
    plt.gca().add_patch(polygon)
    plt.savefig('figure/%d.jpg' % i, dpi=my_dpi)
    plt.axis('off')
    plt.axis([-300,300,-300,300])
i =+ 1

您需要在for循环内创建图形和背景矩形,然后在循环结束时使用plt.close关闭绘图。如果不关闭打印,将使用同一轴打印新多边形。以下是您的代码,稍作调整:

import numpy as np
import matplotlib.pyplot as plt

pixels = 600
my_dpi = 100
num_geo=3

coord = np.array([[[-150, -200], [300, -200], [300, 0], [150, 200], [-150, 200]],
                  [[-300, -200], [200, -300], [200, -50], [200, 300], [-150, 200]],
                  [[-140, -230], [350, -260], [350, 0], [140, 200], [-180, 220]],
                  [[-180, -240], [370, -270], [370, 0], [170, 200], [-190, 230]]])

for i in range(4):
    geo = coord[i, :, :]
    print(coord[i])
    fig = plt.figure(num_geo,figsize=( pixels/my_dpi,  pixels/my_dpi),facecolor='k', dpi=my_dpi)  
    plt.axes([0,0,1,1])
    rectangle = plt.Rectangle((-300, -300), 600, 600, fc='k')
    plt.gca().add_patch(rectangle)
    polygon = plt.Polygon(coord[i],color='w')
    plt.gca().add_patch(polygon)
    plt.axis('off')
    plt.axis([-300,300,-300,300])
    plt.savefig('figure/%d.jpg' % i, dpi=my_dpi)
    plt.close()
下面是编写for循环的一种更具python风格的方法,它使用matplotlib的对象样式。这样,您就不需要关闭地物,因为新地物和新轴是在循环的开始处创建的:

for index, c in enumerate(coord):
    fig, ax = plt.subplots(1, figsize=( pixels/my_dpi, pixels/my_dpi), dpi=my_dpi)  
    rectangle = plt.Rectangle((-300, -300), 600, 600, fc='k')
    ax.add_patch(rectangle)
    polygon = plt.Polygon(c, color='w')
    ax.add_patch(polygon)
    ax.axis('off')
    ax.axis([-300,300,-300,300])
    fig.savefig('figure/%d.jpg' % index, dpi=my_dpi)

您也可以只使用plt.clf-您不必每次都关闭图形或创建一个全新的图形,您可以重复使用它,只要每次都清除它是的,这确实是另一种可能性