猿问

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

我需要在每一步将 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


HUH函数
浏览 159回答 1
1回答

ibeautiful

您需要在 for 循环内创建图形和背景矩形,然后plt.close()在循环结束时使用关闭绘图。如果您不关闭绘图,则将使用相同的轴来绘制新多边形。这是您的代码稍作调整:import numpy as npimport matplotlib.pyplot as pltpixels = 600my_dpi = 100num_geo=3coord = 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 循环的一种稍微 Pythonic 的方式,它使用 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答