2013-03-22 115 views
1

我遇到了這個有趣的問題,用matplotlib的錯誤條。我有兩個列表: 「迭代」,它是一個範圍從0到999的整數值列表;和「平均」,這是1000個大小的列表與真正的負值。matplotlib錯誤條連續線圖

如果我不指定 「yerr」 屬性,我得到:

errorbar(迭代,平均)

img1

但是,如果我指定yerr屬性,但設置爲0,我得到以下內容:

errorbar(iterations,average,yerr = 0)

img2

它似乎很明顯,我認爲這兩個圖片應該是相同的,但第二個是由小的水平線,而第一個似乎連續的。

當我將一個數組作爲yerr(大小:1000,所有值設置爲0,除了一些真正的std-錯誤值,其中索引%50 == 0,爲了不過度擁擠圖像)傳遞的問題。

errorbar(迭代,平均值,yerr =標準錯誤)

我想獲得的圖像,其中主線是連續的(如在第一圖像中),而是我得到一個凌亂的圖像,如第二個。我已經嘗試了很多東西,比如修改linestyle參數,但是我仍然繼續像第一個圖像一樣(每50步間隔有一個錯誤條)

我做錯了什麼?是否有可能做我想做的事。

更新1

當大衛在評論中說,該水平線出現,因爲這是一個標準錯誤的默認形狀爲0。我認爲0值將描繪不errorbar。所以我只需要避免在那裏設置誤差條,將其設置爲0(誤差線僅在50,100,150,200,250 ... 1000)。

更新2(和解決)

這裏添加大衛提出的解決方案:

# plot all points without error bars 
plot(iterations, average) 
# plot errorbars for every 50th point 
errorbar(iterations[::50], average[::50], yerr=stderr[::50], linestyle='None') 

我只是增加了線型= '無',以避免繪製每個yerr條之間的界線。

非常感謝!

+0

只是增加我得到當我把一個真實的yerror陣列圖像:HTTP:// i.stack.imgur.com/PtfOH.png – user899000 2013-03-22 13:42:56

回答

0

那麼,你問錯誤條,你得到它們。相反,如果在參數列表中未指定yerr,則documentation of error bar指出「如果yerr不是None,則繪製垂直錯誤條」。

我不明白背後使用errorbar和設置yerr=0目的,但yerr=0 errorbars顯示爲小水平線,因爲一個errorbar與零垂直延伸的風格。

如果你想指出你的許多數據點的錯誤,最好使用陰影背景來表示錯誤區域。這可能與fill_between function

編輯來實現:在註釋的細化問題,繪圖代碼可能是

# plot all points without error bars 
plot(iterations, average) 
# plot errorbars for every 50th point 
errorbar(iterations[::50], average[::50], yerr=error[::50]) 
+0

謝謝大衛。你所說的一些話讓我很清楚:「由於零垂直延伸的錯誤條的風格,小水平線如何起作用。」現在我更好地理解這是如何工作的。因此,我需要的是僅在需要它們的地方繪製誤差線。換句話說,不是在X的1000個值中,而是在X我想要的特定值(50,100,150,200等等達到1000)中。乾杯! – user899000 2013-03-22 13:57:35

+0

只需將繪圖過程分成一個繪圖過程,在繪圖過程中繪製所有沒有錯誤條的數據和第二條命令,您可以在所選位置繪製錯誤。我編輯了我的答案來說明一種可能性。 – 2013-03-22 14:03:43

+0

甜!它完美地工作,我只在第二個命令中添加了linestyle ='None',以避免在每個yerr欄之間打印行。非常感謝! – user899000 2013-03-22 14:09:37