【问题标题】:Scale errorbar transparency with the size in matplotlib使用 matplotlib 中的大小缩放误差条透明度
【发布时间】:2015-12-21 12:02:17
【问题描述】:

我有一个相当混乱的情节,因此,为了整理它,我想通过降低它们的 alpha 值来使那些具有较大误差线的点不那么重要。最好,我想根据误差条的大小将连续比例​​的 alpha 值(如颜色图)映射到每个点及其误差条 - 我不太确定这样做的最佳/有效方法是什么.

【问题讨论】:

    标签: python matplotlib transparency alpha errorbar


    【解决方案1】:

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

    如果您希望标记的不透明度与误差线相匹配,则可能更容易基于一些规范化构建颜色序列:

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

    但是,您可能需要考虑您创建的效果是否可能会歪曲您的数据(即,使其看起来比只强调带有小误差线的点更准确)。

    【讨论】:

      【解决方案2】:

      您可以将颜色设置为散点图上的第三个变量(参见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()
      

      看起来像

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 2018-01-19
        • 1970-01-01
        相关资源
        最近更新 更多