2014-11-20 45 views
1

我有一個4x4分數矩陣的文件,我想繪製一個調色板的上三角和不同的下三角,覆蓋得分值(MWE在底部)。在gnuplot中使用矩陣與圖像的文件條目的多個調色板和空標籤

原始文件看起來像這樣

0.00 0.65 0.65 0.25 
0.25 0.00 0.75 0.25 
0.50 0.60 0.00 0.25 
0.75 0.25 0.10 0.00 

首先,我創建了兩個單獨的文件和使用的multiplot有2個不同的調色板。

FILE1(上部三角)

0.00 0.65 0.65 0.25 
nan 0.00 0.75 0.25 
nan nan 0.00 0.25 
nan nan nan 0.00 

FILE2(下三角)

0.00 nan nan nan 
0.25 0.00 nan nan 
0.50 0.60 0.00 nan 
0.75 0.25 0.10 0.00 

其次,我與

using 1:2:(sprintf('%.2f', $3)) 

繪製得分值然而, '南' ISN不會被解釋爲空白/空白並跳過,但會寫入情節。

任何想法如何跳過nans並使gnuplot從數據文件的單個條目繪製空標籤?

在以下時尚三元運營商似乎並沒有做的工作

using 1:2:($3 == 'nan' ? 1/0 : sprintf('%.2f', $3)) 

感謝。


set multiplot 
set autoscale fix 
unset key 

set datafile missing "nan" 
set cbrange [0:1] 
unset colorbox 

set palette defined (0 "white", 0.1 "#9ecae1", 1.0 "#3182bd") 

plot FILE1 matrix with image, \ 
    FILE1 matrix using 1:2:(sprintf('%.2f', $3)) with labels font ',16' 

set palette defined (0 "white", 0.1 "#a1d99b", 1.0 "#31a354") 

plot FILE2 matrix with image, \ 
    FILE2 matrix using 1:2:(sprintf('%.2f', $3)) with labels font ',16' 

unset multiplot 

回答

1

你並不需要使用的multiplot和兩個單獨的文件(我也無法得到與唱片這方面的工作)。

只需定義一個調色板,該調色板包含一個調色板的負值和另一個調色板的正值。根據來自告訴你第一個單個文件x和y值,你現在就可以分辨,如果顏色值應該從負或從正面板部分採取:

set autoscale fix 
set cbrange [-1:1] 
unset colorbox 
unset key 

set palette defined (-1.0 "#31a354", -0.1 "#a1d99b", 0 "white", 0.1 "#9ecae1", 1.0 "#3182bd") 

plot 'FILE' matrix using 1:2:($1<$2 ? -$3 : $3) with image,\ 
    '' matrix using 1:2:(sprintf('%.2f', $3)) with labels font ',16' 

enter image description here

+1

謝謝!事實上,您的解決方案一次解決了兩個問題,因爲它避免了將原始文件拆分成兩個單獨的文件,因此不再需要處理NaN。 如果仍然喜歡使用NaN,那麼一種解決方案是使用1:2:(($ 3!= $ 3)?「」:sprintf('%。2f',$ 3))'誇大NaN不等於自身的性質,使得A = NaN;如果(A!= A)打印「A不是數字」(信用E.A.Merrit) – neurino 2014-11-22 14:19:36