亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 for 循環的每一步將多個五邊形保存為圖像

在 for 循環的每一步將多個五邊形保存為圖像

HUH函數 2022-07-05 19:14:56
我需要在每一步將 4 個五邊形保存為圖像,但它將每個圖像保存在前一個圖像上。我需要每個圖像包含一個單獨的多邊形。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]]])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
查看完整描述

1 回答

?
ibeautiful

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)


查看完整回答
反對 回復 2022-07-05
  • 1 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號