2015-12-21 106 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

然而,你可能要考虑关于您创建的效果是否可能歪曲您的数据(即,使其看起来更加准确,而不是仅强调具有小误差线的点)。