是否可以使用gnuplot对两个数据文件中的数据进行操作(加/乘)以生成具有操作结果的热图?
例如:我有两个文件,每个文件有4列,其中
我想将每个文件的第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)
答案 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