2017-03-21 9 views
1

私はこれと同じ静脈に沿って多くの質問を見ましたが、質問に正確に答える前に少しばらついているようです。matplotlibの散布図にエラーバーをプロットする

散弾グラフのポイントと同じ配色でエラーバーをプロットしようとしています。私の値はxおよびy軸上にプロットし、Iは対数別のZ値と色を変えるためにそれらを望んだ場合、現在私は:

c = np.abs(zVals) 
cmhot = plt.get_cmap("plasma") 

sc.set_clim(vmin=min(zVals), vmax=max(zVals)) 

sc = plt.scatter(xVals, yVals, c=c, norm=mplc.LogNorm(), 
s=50, cmap=cmhot, edgecolors='none') 

###This section all works fine, it is when I introduce the error bars I struggle 

norm = mplc.LogNorm(vmin=min(zVals), vmax=max(zVals) 

plt.errorbar(xVals, yVals, yerr = [negyVals,posyVals], c=cmhot(norm(zVals))) 
plt.colorbar(sc) 


plt.ylim([-10,110]) 
plt.xlim([1,100]) 

plt.xscale('log') 


plt.show() 

これは、フォームのエラーをもたらす:

ValueError: to_rgba: Invalid rgba arg ... length of rgba sequence should be either 3 or 4 

私は一般的な色の状況と非常に混同されているので、現時点ではどんな助けも高く評価されます。乾杯。

答えて

0

これは、matplotlibでこれを行うのは驚くほど難しいと思います。私が見つけた唯一の方法は、forループを使用し、各点を個別にプロットすることです。これは点の多数のために非常に効率的ではないだろう明らかにthis plot

を与える例えば

plt.figure() 

#data 
x=np.linspace(-10, 10, 100) 
y=np.cos(x) 
y_error=0.2+0.5*np.random.randn(len(x)) 
z=np.linspace(0, 10, 100) 

cm=plt.get_cmap('plasma') 
plt.scatter(x, y, c=z_values, cmap=cm, zorder=10) 


for i, (xval, yval, y_error_val, zval) in enumerate(zip(x, y, y_error, z)): 

    #Get the colour from the colourmap 
    colour=cm(1.0*zval/np.max(z)) 
    #(could also just do colour=cm(1.0*i/len(x)) here) 
    #(Or Norm(zval) in your case) 

    plt.errorbar(xval, yval, yerr=y_error_val, linestyle='', c=colour) 

plt.show() 

+0

私は多量のポイントを使用していなかったので、これは私にとって完璧です。 悲しいことに、私は既に不透明度の低いバーを使ってプロジェクトを手渡しました。これは私が望むものと一致しましたが、私はこの次回を使用します! – Wrothschild

関連する問題