【问题标题】:Gnuplot: transparency of data points when using paletteGnuplot:使用调色板时数据点的透明度
【发布时间】:2020-02-16 17:02:14
【问题描述】:

有没有办法在使用调色板时绘制透明数据点?

我目前有以下代码:

set style fill transparent solid 0.2 noborder
set palette rgb 22,13,-22
plot 'mydata.dat' u 1:2:3 ps 0.3 palette

我的感觉是透明度被 plot 命令的参数覆盖了。

【问题讨论】:

  • set style fill transparent 适用于填充区域,例如构成 pm3d 表面或多边形内部的小平面或 filledcurves 绘图样式。它不适用于线和点。您的绘图命令似乎使用点,因为您提供了一个点大小选项,尽管命令集不完整,所以我不是 100% 确定。
  • 谢谢@Friedrich。它没有回答这个问题,因为我看不到同时使用调色板的简单方法。还是有用的!
  • 啊!我还需要这个:所有颜色都具有一定透明度的调色板! gnuplot 中缺少的东西很少见。
  • 我刚刚在 sourceforge 上请求了这个 gnuplot 功能,

标签: gnuplot transparency alpha palette


【解决方案1】:

有没有办法在使用调色板时绘制透明数据点?

如果您检查help palette,您将不会在调色板中找到(或者我忽略了)关于透明度的声明。看起来您可以为RGB 以不同的方式设置调色板,但不能为ARGB 设置调色板(A=alpha 通道用于透明度)。所以,我认为调色板不可能有透明度(如果我错了,请纠正我)。 作为解决方法,您必须通过设置具有一定透明度的颜色来“手动”设置透明度。 您可以通过输入show palette rgbformulae 找到调色板后面的公式。

以下示例创建了一个绘图,其中包含xrange[0:1]yrange[0:1] 中的随机点位置、随机点大小(从 2 到 6)和随机透明度(从 0x000xff)。颜色由x 根据您的“手动调色板”确定。我希望您可以根据自己的需要调整此示例。

代码:

### "manual" palette with transparency
reset session

# These are the rgb formulae behind palette 22,13,-22
set angle degrees
r(x) = 3*x-1 < 0 ? 0: (3*x-1 > 1) ? 1 : 3*x-1
g(x) = sin(180*x)
b(x) = 1-(3*x-1) < 0 ? 0: (1-(3*x-1) > 1) ? 1 : 1-(3*x-1)

set xrange [0:1]
set yrange[-0.1:1.1]

RandomSize(n) = rand(0)*4+2              # random size from 2 to 6
RandomTransp(n) = int(rand(0)*0xff)<<24  # random transparency from 0x00 to 0xff
myColor(x) = (int(r(x)*0xff)<<16) + (int(g(x)*0xff)<<8) + int(b(x)*0xff) + RandomTransp(0)

set samples 200
plot '+' u (x=rand(0)):(rand(0)):(RandomSize(0)):(myColor(x)) w p pt 7 ps var lc rgb var not

### end of code

结果:

【讨论】:

  • 为我工作。也感谢您提供背景信息。
  • 后续评论:打印myColor(x) 时,有时会导致负值。这可能是因为在计算或打印级别这会导致有符号整数。似乎工作正常,但也许@theozh 可以帮助澄清?
  • 我不知道你是如何使用它的。在我的情况下,myColor(x) 中的 x 仅适用于 0&lt;=x&lt;=1。上面给出的公式r(x),g(x),b(x) 不应该有负值。
  • 如果我打印一些样本值,例如,重复执行 print(myColor(0.5)) 我得到负值。 Gnuplot 5.2 patchlevel 2。它似乎有效,我认为它是在引擎盖下有符号和无符号之间的转换,但我想我会提到。
  • 显然,gnuplot 将其正确解释为未签名。只是为了检查,试试:do for [i=1:100] { print sprintf("%08x % 11u", myColor(0.5), myColor(0.5))},它将打印 100 种随机颜色,如果你将它们格式化为%u,它们都是正的;-)。顺便说一句,在 gnuplot 文档中,我在列表中找不到格式说明符 %u
【解决方案2】:

Dev 5.5 版的新答案

新功能set colormap 允许定义透明调色板。首先,以通常的方式定义完全不透明的调色板,然后创建它的副本并为所有点添加透明度:

set palette rgb 22,13,-22
set colormap new MYPALETTE
transparency = 0.5
do for [i=1:|MYPALETTE|] {MYPALETTE[i] = MYPALETTE[i] + (int(transparency*0xff)<<24)}
func(x,y) = x*y
splot func(x,y) w pm3d fillcolor palette MYPALETTE

当然,这也适用于积分,您的命令将是 plot 'mydata.dat' u 1:2:3 ps 0.3 lc palette MYPALETTE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2018-09-22
    • 2018-08-16
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多