【问题标题】:gnuplot: label x and y-axis of matrix (heatmap) with row and column namesgnuplot:用行和列名称标记矩阵(热图)的 x 和 y 轴
【发布时间】:2012-05-29 08:56:26
【问题描述】:

我对 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 命令,但到目前为止,这对我来说似乎是完全的巫术......

非常感谢!

【问题讨论】:

    标签: matrix label gnuplot


    【解决方案1】:

    这实际上是一个 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 内置函数(word 和 words)。 words(string) 计算给定字符串中有多少单词(单词是由空格分隔的字符序列)。 word(string,n) 返回字符串中的第 n 个单词。

    现在,我们可以绘制您的数据文件...唯一的问题是matrix 想要使用数据文件中的所有行和列。您可以使用 every 关键字减少实际读取的行/列,但我不知道如何在矩阵文件上执行此操作——而且我认为继续依赖 shell 实用程序可能更容易(awk 和 sed)

    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,希望没问题。

    【讨论】:

    • 您,先生,是我今天的英雄。非常感谢!
    • @zenbomb -- 没问题。这对我来说实际上是一种有趣的游戏,试图弄清楚它。我不经常使用 matrix 数据文件,所以这是我了解 gnuplot 新知识的好机会。
    • XTICS 没有 awk : XTICS="cut -d' ' -f1 test.dat |xargs " ;滥用 xargs 将列转换为行。
    【解决方案2】:

    好的,这个问题很老了,但是在 gnuplot 中已经有一种更简单的方法:

    plot 'result.csv' matrix rowheaders columnheaders with image
    

    从http://gnuplot.sourceforge.net/demo/heatmaps.html得到它

    【讨论】:

    • 补充:rowheaders 和 columnheaders 选项自 5.0 补丁级别 0 起可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多