2017-07-31 41 views
0

在pyplot,當我運行plt.plot(x),似乎在內部運行以下邏輯:Matplotlib.pyplot:打開新的數字環境

1)如果這個數字已經打開,用這個數字,否則,創建一個新的。
2)如果該圖中的軸已經打開,請使用該軸,否則創建一個新的軸。
3)繪製在該軸上。

我想知道如何在下次調用一些繪圖命令時強制步驟(1)打開一個新圖形。像

plt.plot(x1) 
with new_figure_environment(): # Ensure that plot commands within this go to new figures 
    some_function() 
plt.show() 

如果some_function的內容,包含:

def some_function(): 
    plt.plot(x1) 

然後我想開闢一個新的人物,但如果它不包含繪圖功能,然後我不知道。

+1

爲什麼你鍵入'與new_figure_environment():'在你的代碼,如果你不積什麼新的數字呢?相反,這意味着如果你想繪製一個新的數字,你可以輸入'plt.figure()';如果您不想將任何內容繪製到新圖中,則不要輸入'plt.figure()'。 – ImportanceOfBeingErnest

+0

也許'plt.get_fignums'會幫助你。它返回一個現有圖號的列表。如果沒有現有數字,它會返回一個長度爲零的列表。 – saintsfan342000

+0

@ImportanceOfBeingErnest我不一定知道在我的環境中將調用哪些代碼。在我的情況下,在'with'塊中,我調用了一個顯示函數,該函數在其他地方指定,並且可能或不可能使用matplotlib。 – Peter

回答

0

如果你想使用fig1 = plt.figure(1)fig2 = plt.figure(2)等 要在一個具體的數字圖的曲線圖中一個具體的數字編號,繪製你的身材定義軸ax1 = fig1.gca() GCA =獲取當前軸和,而不是使用plt.plot()使用ax1.plot()在繪製圖1

import matplotlib.pyplot as plt 

x1 = [0,1] 
x2 = [0,2] 

y1 = [0,1] 
y2 = [0,-1] 

fig1 = plt.figure(1) 
ax1 = fig1.gca() 

fig2 = plt.figure(2) 
ax2 = fig2.gca() 


ax1.plot(x1,y1,'b') 
ax2.plot(x2,y2,'r') 

plt.show() 

如果你想創建5個位數使用列表:

fig = [] 
ax = [] 
for i in range(5) : 
    fig.append(plt.figure(i)) 
    ax.append(fig[i].gca()) 

如果圖1已經打開,要繪製廣告ditional曲線,你只需要輸入這些行:

fig3 = plt.figure(1) 
ax3 = fig1.gca() 
ax3.plot(x1,y2,'g') 
fig3.canvas.draw() 
+0

無論是否需要繪圖命令,這將創建2個數字,這不是OP所需要的 – DavidG

+0

如果圖1已經打開並且他想在此圖中添加額外繪圖,則只需鍵入在python shell中的例子: 'ax1.plot(x1,y2)'然後'fig1.canvas.draw()' –

+0

嗨,謝謝你的回答,但那不是我所需要的。我重新解釋了這個問題來澄清。 – Peter