繁体   English   中英

使用matplotlib中的大小缩放误差条透明度

[英]Scale errorbar transparency with the size in matplotlib

我有一个非常混乱的情节,所以,为了整理它,我想通过减少它们的alpha值使那些具有较大误差条的点不太重要。 最好,我想根据它们的错误栏大小将连续的alpha值(如颜色图)映射到每个点及其错误栏 - 我不太确定这样做的最佳/有效方法是什么。

您当然可以设置错误栏的alpha,但我认为您需要单独绘制每个,因为Matplotlib不会将垂直线和线条的不透明度(或颜色)设置为序列(据我所知)。

如果您希望标记的不透明度与错误栏匹配,则可能更容易根据某些标准化构建一系列颜色:

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()

在此输入图像描述

但是,您可能想要考虑您创建的效果是否可能错误地表示您的数据(即通过仅强调具有小误差条的点来使其看起来比它更准确)。

您可以将颜色设置为散点图上的第三个变量(请参阅此答案 )。 要更改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()

看起来像 在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM