2017-03-18 105 views
1

errorbar我有一維數組對於一些數量,說T.我已經數據點(X,Y)要與errorbars繪製並用顏色編碼T.彩條對matplotlib

我繪製errorbars爲:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.pylab as pylab 
import matplotlib 

X = np.linspace(0, 10, 50) 
Y = np.random.normal(0, 1, 50)                            
E = np.random.normal(0, 0.1, 50) 

norm = matplotlib.colors.Normalize(vmin=0, vmax=0.5) 
c_m = matplotlib.cm.jet 
s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm) 
s_m.set_array([]) 

plt.figure() 
for i in range(0, len(Y)): 
    plt.errorbar(X[i], Y[i], color=s_m.to_rgba(E[i]), yerr=[E[i], E[i]], capsize=3, ls='none') 
plt.grid() 
plt.show() 

這似乎並不奏效。說:

err must be [ scalar | N, Nx1 or 2xN array-like ] 

對於plt.plot,如果我有說N曲線,每M個點,我必須的ColorCode由T各自的曲線,(尺寸:X [M],Y [N] [M ],T [N])

我做到以下幾點:

norm = matplotlib.colors.Normalize(
vmin=0, 
vmax=32) 

# choose a colormap 
c_m = matplotlib.cm.jet 
# create a ScalarMappable and initialize a data structure 
s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm) 
s_m.set_array([]) 

plt.figure() 
for i in range(0, N): 
    plt.plot(X, Y[i], color=s_m.to_rgba(T[i])) 
plt.grid() 
plt.show() 

此方案適用於情節!但似乎不適用於錯誤欄和1D數組。

但是,我不太確定比較的好處有多遠,因爲在plot(2D)和errorbar(1D)情況下數組維數是不同的。

編輯:

得到的解決方案。它根本不涉及色條。就是那個陣列需要2XN陣列。

因此yerr = [[E [i]],[E [i]]]修復了它。

+0

它您可以通過 「s_m.to_rgba(T)的顏色參數」 的意思不是真的清楚。我建議你提供一個使用plt.plot的工作解決方案,這將清楚你如何使用它。然後我們可以將它擴展到錯誤欄。 – ImportanceOfBeingErnest

+0

添加了該過程。 – user3440489

回答

1

我仍然沒有看到問題。與plt.errorbar工作就好了更換plt.plot

import matplotlib.pyplot as plt 
import matplotlib.colors 
import matplotlib.cm 
import numpy as np 

N=3 
x=np.arange(10) 
Y = np.random.rand(len(x),N) 
a = np.ones_like(x)*0.1 
T = np.array([5,12,27]) 

plt.figure() 

norm = matplotlib.colors.Normalize(vmin=0,vmax=32) 
# choose a colormap 
c_m = matplotlib.cm.jet 
# create a ScalarMappable and initialize a data structure 
s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm) 
s_m.set_array([]) 

for i in range(0, N): 
    plt.errorbar(x, Y[:,i], yerr=[a,a], color=s_m.to_rgba(T[i]), capsize=3, ls='none') 
plt.grid() 
plt.grid() 

plt.show() 

enter image description here

+0

非常感謝。然而,對於錯誤欄的情況,我有X,Y的一維數組。對於繪圖,我有數據的二維數組。因此,我試圖將後者的代碼用於前者。對不起,以前沒有說清楚。我現在編輯了這個問題。 – user3440489