gpt4 book ai didi

matrix - gnuplot:用行和列名称标记矩阵(热图)的 x 和 y 轴

转载 作者:行者123 更新时间:2023-12-04 10:05:02 25 4
gpt4 key购买 nike

我对 gnuplot 完全陌生,在谷歌搜索后没有找到有效的解决方案。

我有一个看起来像这样的数据矩阵:

  A B C D E
A 0 2 3 4 5
B 6 0 8 9 0
C 1 2 0 4 5
D 6 7 8 0 0
E 1 2 3 4 0

我想做的是用 plot 'result.csv' matrix with image 绘制热图,x 轴用 A-E 标记,y 轴用 A-E 标记。这个矩阵并不总是具有相同的大小,但行数总是等于列数并且它总是被标记。

有人可以帮我解决这个问题吗?我想我必须使用 using命令,但到目前为止,这对我来说似乎是完全的巫术……

非常感谢!

最佳答案

这实际上是一个 doosie,如果没有 *nix shell 魔法,我就无法实现它。

首先,我们要获得 x tic 标签和 y tic 标签:

XTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' test.dat`"
YTICS="`head -1 test.dat`"

此时,XTICS 是字符串“F G H I J”,而 YTICS 是字符串“A B C D E”。

现在,我们想通过迭代来设置 xtics:
set for [i=1:words(XTICS)] xtics ( word(XTICS,i) i-1 )
set for [i=1:words(YTICS)] ytics ( word(YTICS,i) i-1 )

我们使用了 2 个 gnuplot 内置函数( wordwords )。 words(string)计算给定字符串中有多少个单词(单词是由空格分隔的字符序列)。 word(string,n)返回字符串中的第 n 个单词。

现在,我们可以绘制您的数据文件...唯一的问题是 matrix想要使用数据文件中的所有行和列。您可以使用 every 减少实际读取的行/列。关键字,但我不知道如何在矩阵文件上执行此操作——我认为继续依赖 shell 实用程序( awksed )可能更容易
plot "<awk '{$1=\"\"}1' test.dat | sed '1 d'" matrix w image
#######^ replace the first field with nothing
################################## ^ delete first line

现在你的情节(希望)看起来像你想要的那样。

另请注意,由于我们使用了迭代,因此该脚本仅适用于 gnuplot 4.3 或更高版本——因为当前的稳定版是 4.6,希望没问题。

关于matrix - gnuplot:用行和列名称标记矩阵(热图)的 x 和 y 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com