2016-07-22 74 views
2

下面的Python/pyplot代碼會生成四個數字和四個窗口。我需要打開一個窗口顯示fig1的代碼。然後,當用戶按下右箭頭按鈕或右箭頭鍵時,同一個窗口將清除fig1並顯示fig2。所以基本上只有四個數字中的一個將被用戶選擇以幻燈片形式觀看。我在文檔和在線搜索了一個答案,但沒有成功。我編輯了這個問題來顯示四個圖中出現的六個軸的定義。看來,必須將軸與一個圖形關聯,然後繪製,清除並重繪軸以在默認GUI中模擬幻燈片放映?如何創建matplotlib幻燈片?

import numpy as np 
import matplotlib.pyplot as plt 

fig1 = plt.figure() 
ax1 = fig1.add_subplot(3, 1, 1) 
ax2 = fig1.add_subplot(3, 1, 2, sharex=ax1) 
ax3 = fig1.add_subplot(3, 1, 3, sharex=ax1) 
fig2 = plt.figure() 
ax4 = fig2.add_subplot(1, 1, 1) 
fig3 = plt.figure() 
ax5 = fig2.add_subplot(1, 1, 1) 
fig4 = plt.figure() 
ax6 = fig2.add_subplot(1, 1, 1) 
plt.show() 

理想情況下,我想設置後端以確保在MacOS,Linux和Windows上具有相同的代碼功能。不過,如果有必要,我會滿意地獲得一個基本的幻燈片工作在Windows 7上,併爲其他操作系統開發。

回答

2

也許是這樣的: (點擊圖上的切換)

import matplotlib.pyplot as plt 
import numpy as np 

i = 0 

def fig1(fig): 
    ax = fig.add_subplot(111) 
    ax.plot(x, np.sin(x)) 


def fig2(fig): 
    ax = fig.add_subplot(111) 
    ax.plot(x, np.cos(x)) 


def fig3(fig): 
    ax = fig.add_subplot(111) 
    ax.plot(x, np.tan(x)) 


def fig4(fig): 
    ax1 = fig.add_subplot(311) 
    ax1.plot(x, np.sin(x)) 
    ax2 = fig.add_subplot(312) 
    ax2.plot(x, np.cos(x)) 
    ax3 = fig.add_subplot(313) 
    ax3.plot(x, np.tan(x)) 

switch_figs = { 
    0: fig1, 
    1: fig2, 
    2: fig3, 
    3: fig4 
} 

def onclick1(fig): 
    global i 
    print(i) 
    fig.clear() 
    i += 1 
    i %= 4 
    switch_figs[i](fig) 
    plt.draw() 

x = np.linspace(0, 2*np.pi, 1000) 
fig = plt.figure() 
switch_figs[0](fig) 
fig.canvas.mpl_connect('button_press_event', lambda event: onclick1(fig)) 

plt.show() 
+0

這很好地解決了我的問題!我接受了這個答案B/C它在支持全屏和調整大小的Windows 7默認GUI中工作。即使在每個def語句中使用fig.set_tight_layout(True),它也可以工作。但是,如果我在100 dpi下定義一個尺寸爲10 x 6.5英寸的數字,則會有一個問題以全尺寸重新繪製。我將爲打印支持編寫單獨的代碼。 – SystemTheory