【问题标题】:Gnuplot: colors in multiplot not transparentGnuplot:多图中的颜色不透明
【发布时间】:2020-05-25 15:06:40
【问题描述】:

我想用不同的调色板(每个都是对数刻度)绘制一个非等距矩阵的正值和负值,这样整个有效颜色代码是 (-max "blue", figure)。结果,后者的情节完全覆盖了前者,这是看不到的。我试图用透明颜色定义我自己的调色板,但无法使用“plot for”命令使其工作。 (备注:这是here的后续问题。)

当前剧情脚本:

CoordsX = "0.04 0.11 0.24 0.4 0.51"
CoordsY = "0.04 0.11 0.24 0.4 0.51"
dim_x = words(CoordsX)
dim_y = words(CoordsY)

dx(i) = (word(CoordsX,i)-word(CoordsX,i-1))*0.5
dy(i) = (word(CoordsY,i)-word(CoordsY,i-1))*0.5
ndx(i,j) = word(CoordsX,i) - (i-1<1     ? dx(i+1) : dx(i))
pdx(i,j) = word(CoordsX,i) + (i+1>dim_x ? dx(i)   : dx(i+1))
ndy(i,j) = word(CoordsY,j) - (j-1<1     ? dy(j+1) : dy(j))
pdy(i,j) = word(CoordsY,j) + (j+1>dim_y ? dy(j)   : dy(j+1))

set size square
set xrange[ndx(1,1):pdx(dim_x,1)]
set yrange[ndy(1,1):pdy(1,dim_y)] reverse
set tic out

set term png truecolor
set output "test.png"

set multiplot
max = 25
set cbrange [0:max]
set object rectangle from screen 0,0 to screen 1,1 behind fillcolor rgb "grey" fillstyle solid noborder # Only added to see transparency

set palette defined (0 "white", max "blue")
plot for [i=1:dim_x] file u\
(real(word(CoordsX,i))):1:(ndx(i,int($0))):(pdx(i,int($0))):(ndy(i,int($0+1))):(pdy(i,int($0+1))):(column(i)<0?abs(column(i)):NaN)\
with boxxyerror fs transparent solid 1.0 palette notitle
set palette defined (0 "white", max "red")
plot for [i=1:dim_x] file u\
(real(word(CoordsX,i))):1:(ndx(i,int($0))):(pdx(i,int($0))):(ndy(i,int($0+1))):(pdy(i,int($0+1))):(column(i)>0?abs(column(i)):NaN)\
with boxxyerror fs transparent solid 1.0 palette notitle
unset multiplot
set output

【问题讨论】:

    标签: colors gnuplot transparent palette


    【解决方案1】:

    几个cmets:

    1) multiplot 不是创建单个图的正确机制。通过将命令序列重组为单个 plot 命令,您将获得更好的结果。如有必要,您可以将调色板分成两半,红色一半和蓝色一半。例如

    set palette defined (0 "white", 1 "dark-red", 1 "white", 2 "dark blue")
    set cbrange [0 : 2*max]
    plot 'redstuff' using 1:...:(color) fc palette, \
         'bluestuff' using 1:...:(color+max) fc palette
    

    2) 您选择的填充样式是完全不透明的。如果你想要 50% 的透明度,它需要是

     set style fill transparent solid 0.5
    

    3) 目前尚不清楚您的 NaN 值究竟出现在哪里。如果其中一个组件矩形以 NaN 作为坐标,则根本不会绘制它 - 因此它实际上是完全透明的。但是,提供 NaN 作为颜色值通常不会产生透明度。作为一个特例,with image 绘图样式确实知道忽略值为 NaN 的像素,但其他绘图样式没有“像素”的概念。

    【讨论】:

    • 感谢@Ethan 的评论。您的建议 1) 似乎很有趣,但是,我不知道如何将其与非等距 x 和 y 值所需的“绘图”相协调。 2) 并不是我真正想要的。我的想法是有一个调色板范围从(0“完全透明”,1“完全不透明”),例如,红色作为基础颜色。第 3 点):“带图像”的问题是它不允许矩阵的非等距索引。然而,这正是我所需要的。有没有办法告诉 gnuplot 将 NaN 值绘制为透明的?
    • (1) 没问题:plot for [i=1:FOO] "redstuff", for [i=1:BAZ] "bluestuff"。 (2) 调色板没有 Alpha 通道,因此您不能将透明度与调色板值联系起来。 (3) 不可以,但是您可以使 x 或 y 坐标以颜色值为条件:plot FOO using (column(color)==column(color)? $1 : NaN):2 x 坐标将从第 1 列获取,除非颜色列为 NaN。
    • 嗯,好的。 “列(颜色)==列(颜色)”是什么意思,或者您的帖子中有错字?所以我得出结论,在 gnuplot 中不可能有两个地块,每个地块都有一个对数刻度!?因为按照您的建议进行绘图不允许使用两个不同的对数刻度。
    • 啊,好的。我打算通过set logscale cb 绘制它,但将所有范围都放在一个颜色图中。 (值的范围从 +- 1e-15 到 1e1,因此提出了将正负图分开的想法,每个图都有一个 cb 对数刻度。有没有办法实现这一点?
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多