print Sprintf error while the input is a string which consist of symbol in heatmap gnuplot

做~自己de王妃 提交于 2020-01-01 19:18:13

问题


I am working on heat map with a unique dataset. The dataset consists of a symbol. Here is the example of my dataset 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

and here is my gnuplot script

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

What I'm trying to do here is I want to displaying "0/0" as a label in the heatmap and the integer number as a heatmap color.

The problem that I face here is the gnuplot only take a number before "/" and ignore the other one.

Here is the result of my current plot.

How to make the heatmap show a lable like "1/3.5" and have color based on the integer number.


回答1:


There is no need to usesprintf at all. Simply use stringcolumn to get the raw content of a column as saved in the data file:

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


来源:https://stackoverflow.com/questions/34504450/print-sprintf-error-while-the-input-is-a-string-which-consist-of-symbol-in-heatm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!