【问题标题】:Adding/multiplying heatmaps in gnuplot在 gnuplot 中添加/相乘热图
【发布时间】:2019-11-18 13:48:43
【问题描述】:

是否可以使用 gnuplot 对来自两个数据文件的数据执行操作(相加/相乘)以生成带有操作结果的热图?

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

  • Col1:X 坐标
  • Col2:Y 坐标
  • 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)

【问题讨论】:

  • 是的,它(以某种方式)是可能的。这里的人们希望你展示你自己的尝试和你的代码你已经走了多远,并就特定的编码问题寻求帮助。此外,您应该显示数据的结构(例如一些示例行)以避免胡乱猜测。

标签: gnuplot heatmap


【解决方案1】:

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

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

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

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

【讨论】:

  • 太棒了!如此简单-非常感谢。可能我的搜索范围太窄,所以我没有找到其他帖子。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多