Gnuplot:具有可变样式的错误栏

Gnuplot: Errorbars with variable style

我想绘制带有误差线的数据,其中的点非常密集并且误差相当不同。我希望 "good" 点(即小错误)非常突出,而 "bad" 点(即大错误)不那么明显,因为我不希望坏点占主导地位整体情况。这可以通过动态改变线宽或透明度来实现。

到目前为止我想出的是使用硬截断并绘制数据两次:所有具有小误差 (<=0.1) 的点具有实线颜色,所有具有大误差的点 ( >0.1) 增加了透明度。

$data << EOD
535.66534   1.553616310747869   0.08061677996455376
536.15027   1.520824866288427   0.05828386048268186
537.38049   1.332803196338175   0.235778491140896
537.64696   1.479699311985051   0.3751992204089783
540.20631   1.497105281091503   0.04237229839015798
541.41537   1.320918189513518   0.4115091427635642
542.00647   1.47517488483194    0.3873921664923128
543.51616   1.515846650015762   0.0471200695087297
545.00234   1.538963623338375   0.1611245310026408
556.4311    1.606343443386191   0.04973685496066002
EOD
plot $data u 1:(>0.1 ? 1/0 : ):3 w yerrorbars lc 1, '' u 1:(<=0.1 ? 1/0 : ):3 w yerrorbars lc rgb "#aa9400d3"

但这是一个相当硬编码的解决方案。一个更动态的图片,其中每个点的透明度是根据其误差的大小单独计算的,会更好更平滑。有谁知道如何实现这一目标?也欢迎针对 "hiding" 缺点提出替代建议!

使用调色板可能是一个起点:

set palette defined ( 0 "blue", 1 "white" ) 
# unset colorbox
plot $data u 1:2:3:3 w yerrorbars lc palette z lw 2 

它不使用透明度,而是将颜色从蓝色更改为白色。 Gnuplot 会自动选择合适的 cbrange,在本例中为 0 到 0.45。值 0 对应蓝色,0.45 对应白色。如有必要,您可以使用 set cbrange 调整此范围。可以使用 unset colorbox 抑制颜色框。有关详细信息,请参阅 help palettehelp rgbcolor

这是结果: