2015-11-02 79 views
1

我想使用matplotlib來繪製錯誤欄,但有一個稍微不同的要求。所以,設置如下:matplotlib:爲每個x軸刻度分組錯誤欄

我有3種不同的方法,我在10個不同的參數設置進行比較。所以,在y軸上我有3種方法和x軸給出的模型擬合誤差,我有不同的參數設置。

因此,對於每個參數設置,我想獲得3個方法對應的3個錯誤條形圖。理想情況下,我想繪製95%置信區間,以及每個參數設置的每種方法的最小值和最大值。

parameters = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7] 
mean_1 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5] 
std_1 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5] 

mean_2 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5] 
std_1 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5] 

mean_3 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5] 
std_3 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5] 

我一直價值觀相同不改變但從繪圖點什麼:

一些示例數據可以作爲進行模擬。我看到matplotlib.errorbar方法,但我不知道如何在單個x軸值上使用多種方法來擴展它,就像我對我的情況一樣。另外,我不確定如何爲每種方法添加[min, max]標記。

+0

查看[errorbar的文檔](http://matplotlib.org/1.2.1/examples/pylab_examples/errorbar_demo.html)! – jkalden

+0

這些例子都沒有提到問題的問題......我錯過了什麼? – Luca

回答

1

以你parameters列表爲x軸,mean_1爲y值和std_1的錯誤,你可以繪製與

pylab.errorbar(parameters, mean_1, yerr=std_1, fmt='bo') 

萬一錯誤欄不是對稱的,即你有lower_errupper_err的errorbar圖,該語句讀取

pylab.errorbar(parameters, mean_1, yerr=[lower_err, upper_err], fmt='bo') 

與x方向,也就是現在希望不言自明的錯誤關鍵字xerr同樣的作品。 要顯示幾個(在你的案件3)不同的數據集,你可以去下面的方式:

# import pylab and numpy 
import numpy as np 
import pylab as pl 

# define datasets 
parameters = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7] 
mean_1 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5] 
std_1 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5] 

mean_2 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5] 
std_2 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5] 

mean_3 = [10.1, 12.1, 13.6, 14.5, 18.8, 11.8, 28.5] 
std_3 = [2.6, 5.7, 4.3, 8.5, 11.8, 5.3, 2.5] 


# here comes the plotting; 
# to achieve a grouping, two things are extra here: 
# 1. Don't use line plot but circular markers and different marker color 
# 2. slightly displace the datasets in x direction to avoid overlap 
# and create visual grouping 
pl.errorbar(np.array(parameters)-0.01, mean_1, yerr=std_1, fmt='bo') 
pl.errorbar(parameters, mean_2, yerr=std_2, fmt='go') 
pl.errorbar(np.array(parameters)+0.01, mean_3, yerr=std_3, fmt='ro') 
pl.show() 

這是關於pylab.errorbar,在那裏你必須明確給出錯誤。另一種方法是使用pylab.boxplot併爲每個模型製作一個箱形圖,但是因此我想我需要每個模型的每個參數的完整分佈,而不僅僅是平均值和標準差。

+0

我明白你的意思了。我錯過了位移技巧。 – Luca