在gnuplot中添加/相乘热图

时间:2019-11-18 13:48:43

标签: gnuplot heatmap

是否可以使用gnuplot对两个数据文件中的数据进行操作(加/乘)以生成具有操作结果的热图?

例如:我有两个文件,每个文件有4列,其中

  • Col1:X坐标
  • Col2:Y coordiante
  • Col3:价值
  • Col4:不确定性

我想将每个文件的第3列相乘。

我想知道gnuplot是否存在类似的东西/是否可以工作,例如...

splot 'first.dat' using 1:2:(v=$3), 'second.dat' using 1:2:(v*$3)

我已经能够使用同一文件中的两列进行操作

splot 'first.dat' using 1:2:($3*$4)

2 个答案:

答案 0 :(得分:1)

已经回答了一个非常类似的问题: gnuplot plot data from two files

在您的情况下,它看起来像这样:

splot "<paste first.dat second.dat" u 1:2:($3*$6)

请注意,两个文件中的所有列均存在,因此您必须“跳过”第二个文件中的那些列。

答案 1 :(得分:1)

OP显然运行Linux或MacOS。 @Eldrad的简短解决方案不适用于Windows。当然,您可以安装其他程序,例如gnuwin,awk等...

以下是独立于平台且仅支持gnuplot的解决方案(稍微复杂一点)。 您加载files 1:1 into datablocks并通过添加每行将这些数据块打印到新的数据块中。当然,假设两个文件的行数相同。

代码:

### plot data from different files combined with mathematical operation
# platform independent gnuplot-only solution
reset session

Windows = GPVAL_SYSNAME[:7] eq "Windows" ? 1 : 0   # otherwise Linux or MacOS

FILE = "first.dat"
Data = "$Data1"
if (Windows) { load '< echo   '.Data.' ^<^<EOD  & type "'.FILE.'"' }
else         { load '< echo "\'.Data.'   <<EOD" & cat  "'.FILE.'"' }

FILE = "second.dat"
Data = "$Data2"
if (Windows) { load '< echo   '.Data.' ^<^<EOD  & type "'.FILE.'"' }
else         { load '< echo "\'.Data.'   <<EOD" & cat  "'.FILE.'"' }

set print $Data
    do for [i=1:|$Data1|] {
        print $Data1[i][1:strlen($Data1[i])-1]."\t".$Data2[i]
    }
set print

splot $Data u 1:2:($3*$6)
### end of code