2015-12-21 32 views
1

我有一個相當混亂的情節,所以爲了整理它,我想通過減少它們的alpha值來使那些具有較大誤差條的點變得不太重要。優選地,我想根據錯誤欄大小將連續比例​​的alpha值(如colourmap)映射到每個點及其錯誤欄 - 我不太確定要做到這一點的最佳/有效方法是什麼。在matplotlib中縮放誤差條的透明度

回答

0

您可以將顏色設置爲散點圖上的第三個變量(請參閱此answer)。要更改alpha,只能根據縮放範圍更改顏色的第四個值(透明度)。作爲一個小例子,

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0, 20, 100) 
y = np.sin(x) 
z = x + 20 * y 

scaled_z = (z - z.min())/z.ptp() 
colors = [[0., 0., 0., i] for i in scaled_z] 

plt.scatter(x, y, marker='x', edgecolors=colors, s=150, linewidths=4) 
plt.show() 

它看起來像enter image description here

1

你當然可以設置errorbars的α,但我認爲你需要單獨繪製每一個因爲Matplotlib不會設置不透明度(或顏色)的垂直線和標題到一個序列(據我所知)。

如果你想標記有自己的不透明性匹配errorbars,它可能更容易建立的顏色基於一些標準化的序列:

import numpy as np 
import matplotlib.pyplot as plt 

n = 20 
x = np.linspace(1, 10, n) 
y = x - x**2 
minerr = 2 
yerr = abs(np.random.randn(n) * 15) + minerr 
maxerr = max(yerr) 
err_range = maxerr - minerr 

alphas = [1 - (err-minerr)/(err_range) for err in yerr] 
colors = np.asarray([(1,0,0, alpha) for alpha in alphas]) 

plt.scatter(x,y, c=colors, edgecolors=colors) 
for pos, ypt, err, color in zip(x, y, yerr, colors): 
    plotline, caplines, (barlinecols,) = plt.errorbar(pos, ypt, err, lw=2, color=color, capsize=5, capthick=2) 

plt.xlim(0,11) 
plt.show() 

enter image description here

然而,你可能要考慮關於您創建的效果是否可能歪曲您的數據(即,使其看起來更加準確,而不是僅強調具有小誤差線的點)。