有两个数据文件,我需要使用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"透明。
答案 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 rgbformulae
,show palette rgbformulae
之后)。颜色值r,g和b预计在0到255之间。矩阵值被映射,使得每个文件中的最高值将以黄色显示。透明度函数a(x)为参数1返回0(完全透明),否则返回255(不透明)。
结果如下:
请注意绘图风格" rgbalpha"和" pm3d"以不同方式处理坐标。根据您的需要,这可能需要对xrange和yrange进行一些调整,或者对using 1:2:...
using ($1+0.5):($2+0.5):...
进行一些调整。