在pm3d地图中为矩阵的某些元素指定透明度

时间:2017-02-24 10:57:16

标签: plot gnuplot

有两个数据文件,我需要使用pm3d map重叠它们的颜色图。我需要为最低值分配透明度,这样我才能实际重叠两个图。

第一个数据文件data1.dat包含:

1   1   1   1   1
1   1   1   1   1
1   1   1   30  1
1   45  1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1

第二个数据文件data2.dat是:

1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   1   1
1   1   1   80  1
1   1   1   20  1

以下是我尝试使用gnuplot文件的内容:

set terminal png
set output 'data_plot.png'
set pm3d map

set multiplot

stats "data1.dat" matrix name "A"
show variables A_
stats "data2.dat" matrix name "B"
show variables B_

splot for[i=0:4] 'data1.dat' matrix using (column(i)==A_min ? NaN :column(i)/A_max), for[i=0:4] 'data2.dat' matrix using (column(i)==B_min ? NaN :column(i)/B_max)

当我输入条件column(i)==A_min时,它正在检查列号(显然)是A_min;有没有办法检查元素的值(访问元素)? 我需要为所有元素分配值" 1"透明。

1 个答案:

答案 0 :(得分:1)

我无法使pm3d工作,可能是因为NaN值。是否可以选择使用rgbalpha代替help rgbalpha)?

set terminal pngcairo
set output 'data_plot.png'

stats "data1.dat" matrix name "A"
show variables A_
stats "data2.dat" matrix name "B"
show variables B_

set nokey

r(x) = 255*sqrt(x)                  # rgbformulae 7
g(x) = 255*x**3                     # rgbformulae 5
b(x) = 255*(0.5+0.5*sin(2.0*pi*x))  # rgbformulae 15
a(x) = (x==1) ? 0 : 255             # fully transparent or opaque

plot 'data1.dat' matrix using 1:2:(r($3/A_max)):(g($3/A_max)):(b($3/A_max)):(a($3)) with rgbalpha ,\
     'data2.dat' matrix using 1:2:(r($3/B_max)):(g($3/B_max)):(b($3/B_max)):(a($3)) with rgbalpha

命令plot with rgbalpha需要6列:x,y,r,g,b,alpha。这意味着我们需要坐标,并且我们必须将矩阵值映射到颜色值。我们从here中提取一些想法。引用comment from Christoph

  

使用矩阵时,gnuplot内部生成三列:第一列是矩阵列,第二列是矩阵行,第三列包含实际的矩阵数据值。

对于颜色的计算,使用默认映射(在阅读help rgbformulaeshow palette rgbformulae之后)。颜色值r,g和b预计在0到255之间。矩阵值被映射,使得每个文件中的最高值将以黄色显示。透明度函数a(x)为参数1返回0(完全透明),否则返回255(不透明)。

结果如下:

two matrices with some transparency

请注意绘图风格" rgbalpha"和" pm3d"以不同方式处理坐标。根据您的需要,这可能需要对xrange和yrange进行一些调整,或者对using 1:2:... using ($1+0.5):($2+0.5):...进行一些调整。