如何在Gnuplot中制作半透明散点图?

20

我该如何使用Gnuplot绘制一个带有部分透明散点的图片,就像下面的图片一样?问题是我不知道如何设置散点的透明度。

一个散点图示例


谢谢你的回答!非常有用。但是很抱歉我不知道如何将你的答案标记为正确答案。顺便说一下,我发现另一种方法是先制作统计数据以获取每个点的密度,然后在gnuplot中使用调色板绘图。再次感谢! - Dd H
忘记 gnuplot,上面那个图是如何生成的?看起来好像比 smoothScatter 更好。 - ijoseph
2个回答

25

试试这个:

set style fill  transparent solid 0.35 noborder
set style circle radius 0.02
plot 'test' u 1:2 with circles lc rgb "blue", \
     '' u 1:2 every 100 w circles lc rgb "red" fs solid 1.0 border lt -1

输出结果为 enter image description here

如您所见,您可以为每个数据集指定是否使用透明度以及使用哪种颜色。
如果您的数据由两个值(圆的x和y位置)组成,则必须通过set style circle ...指定圆的半径。 如果您的数据有三行,则可以使用第三个值来指定每个数据点的圆的半径。
您可以调整透明度级别,范围从0(完全透明)到1(不透明)。


14

您可以使用argb的alpha通道,以及lc rgb variable

set samp 2000
randn(x) = invnorm(rand(x))
pl [-3:3][-3:3] '+' us (randn(0)):(randn(0)):(0xBB00AAFF) lc rgb variable pt 7 ps 2

lp 7.

这会在每个圆周围留下一些边缘,可能是由于圆加上一个填充圆的不透明度效果。不幸的是,没有像matplotlib中的edgecolor选项来控制这个问题。用粗线宽的空心圆代替填充圆pt 7,可以稍微减轻这个问题。pt 6 lw 6

pl [-3:3][-3:3] '+' us (randn(0)):(randn(0)):(0xBB00AAFF) lc rgb variable pt 6 lw 6

pt 6 lw 6.

使用lc rgb variable也可以模拟可变透明度

set samp 50
pl '+' us 1:1:(0x00AAFF+(int(0xFF*$1/10.)<<24)) pt 7 lc rgb variable ps 3

int(0xFF*$1/10.)将输入从0到10映射到0到255,并使用<<24将其移动到alpha通道中。

请注意,在您的绘图中,只有密集区域似乎具有透明度效果,而不是背景中的散点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接