打印Sprintf错误,而输入是一个字符串,由heatmap gnuplot中的符号组成

时间:2015-12-29 04:31:22

标签: awk graph printf gnuplot heatmap

我正在使用唯一数据集处理热图。数据集由符号组成。 以下是我的数据集1q.txt

的示例
            one         two         three   
2009        0/0    1    0/0    1    0/0      1      
2010        0/0    1    0/0    1    0/0      1      
2011        0/0    1    0/0    1    6/179.5  1  
2012        0/0    1    2/0.4  1    11/83.0  1
2013        7/0.8  1    7/21.3 1    17/268.5 1
2014        1/3.5  1    4/7.7  1    9/37.9   1

这是我的gnuplot脚本

set term pos eps font 20
unset colorbox
unset key
set nocbtics
set cblabel "Score" 
set cbtics scale 0
set cbrange [ 0.00000 : 110.00000 ] noreverse nowriteback
set palette defined ( 0.0 "#FFFFFF",\
                      1 "#FFCCCC",\
                      2 "#FF9999 ",\
                      3 "#FF6666")

set size 1, 0.5
set output '1q.eps'
YTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' '1q.dat'`"
XTICS="`head -1 '1q.dat'`"
set for [i=1:words(XTICS)] xtics ( word(XTICS,i) i-1 )
set for [i=1:words(YTICS)] ytics ( word(YTICS,i) i-1 )

set for [i=1:words(XTICS)] xtics ( word(XTICS,i) 2*i-1 )
plot "<awk '{$1=\"\"}1' '1q.dat' | sed '1 d'" matrix every 2::1 w image, \
     '' matrix using ($1+1):2:(sprintf('%.f', $3)) every 2 with labels

我在这里要做的是我想在热图中显示“0/0”作为标签,并将整数作为热图颜色显示。

我在这里遇到的问题是gnuplot只在“/”之前取一个数字  并忽略另一个。

这是我目前情节的结果。

enter image description here

如何使热图显示像“1 / 3.5”这样的标签,并根据整数显示颜色。

1 个答案:

答案 0 :(得分:1)

根本不需要使用sprintf。只需使用stringcolumn即可获取保存在数据文件中的列的原始内容:

plot "<awk '{$1=\"\"}1' '1q.dat' | sed '1 d'" matrix every 2::1 w image, \
 '' matrix using ($1+1):2:(stringcolumn(3)) every 2 with labels