1 回答

TA貢獻1993條經驗 獲得超6個贊
您需要在 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 循環的一種稍微 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)
添加回答
舉報