2015-09-27 29 views
0

我matplotlib繪製時所遇到的這種奇特的現象:matplotlib - 消失的曲線時,未顯示軸

mean = 0 
variance = np.linspace(0.5, 1, 3) 
x = np.linspace(-3,3,100) 
for var in variance: 
    plt.plot(x,mlab.normpdf(x,mean,np.sqrt(var))) 
    #plt.axes(frameon = False)  

此輸出預期的結果:

with frame

但是,一旦我取消,

mean = 0 
variance = np.linspace(0.5, 1, 3) 
x = np.linspace(-3,3,100) 
for var in variance: 
    plt.plot(x,mlab.normpdf(x,mean,np.sqrt(var))) 
    plt.axes(frameon = False) 

我得到這個:

without frame

爲什麼曲線消失?

回答

1

問題是,plt.axes正在做全球國家令人驚訝的事情。到plt.plot的第一個電話是創建一個新Axes,調用plt.axes然後創建一個Axes,以plt.plot地塊以新的座標軸和第二個電話,然後調用plt.axes返回相同Axes對象作爲最後時間被稱爲(因爲它跟蹤軸的'簽名',如果不需要重新創建它),然後第三個plt.plot與第二個調用plt.plot的座標軸繪製成相同的座標軸。

來修復代碼

from matplotlib import mlab 
import numpy as np 

mean = 0 
variance = np.linspace(0.5, 1, 3) 
x = np.linspace(-3,3,100) 
plt.axes(frameon = False) 
for var in variance: 
    plt.plot(x, mlab.normpdf(x,mean,np.sqrt(var))) 

但最好做

from matplotlib import mlab 
import numpy as np 

mean = 0 
variance = np.linspace(0.5, 1, 3) 
x = np.linspace(-3,3,100) 

fig, ax = plt.subplots() 
ax.set_frame_on(False) 
for var in variance: 
    ax.plot(x, mlab.normpdf(x,mean,np.sqrt(var))) 
+0

這也解釋了吧,沒錯。然而,稱這是一個錯誤是否正確? –

+2

我認爲這是正確的,但惱人的行爲。無論如何,OO風格是首選。 – tacaswell