2013-10-05 87 views
12

我想用gnuplot繪製一個18x18矩陣。這裏是我的代碼:Gnuplot用圖像繪製2D矩陣,想繪製每個單元格的邊框

set size ratio 1 
set palette gray negative 
set xrange[-0.5:17.5] 
set yrange[-0.5:17.5] 
set cbrange[-0.2:0.8] 
set xtics 0,1,17 
set ytics 0,1,17 
set xtics offset -0.5,0 
set title "Resolusition Matrix for E" 
plot "Mat" matrix w image noti 

然後我得到了這樣一個圖:

enter image description here

現在我想邊框添加到每個細胞,這將是這樣的:

enter image description here

謝謝。

回答

13

對於你的情況,你可以設置一個較小的抽動,然後位於兩個像素之間的邊界,並在其上繪製一個網格:

set size ratio 1 
set palette gray negative 
set autoscale xfix 
set autoscale yfix 
set xtics 1 
set ytics 1 
set title "Resolution Matrix for E" 

set tics scale 0,0.001 
set mxtics 2 
set mytics 2 
set grid front mxtics mytics lw 1.5 lt -1 lc rgb 'white' 
plot "Mat" matrix w image noti 

注意,這set grid front也帶來了抽動前面。爲了避免這種情況,您可以將抽搐縮放到0。對於小動作,您必須使用非常小的數字,0會忽略小動作上的網格線。

與4.6.3結果是:

enter image description here

編輯:爲了獨立地控制網格線和抽動標籤,則可以使用未使用的x2y2和繪製網格(由啓發回答How do I draw a vertical line in gnuplot?):

set size ratio 1 
set palette gray negative 
# grid lines 
set x2tics 1 format '' scale 0,0.001 
set y2tics 1 format '' scale 0,0.001 
set mx2tics 2 
set my2tics 2 

# labeling 
set xtics 5 out nomirror 
set ytics 5 out nomirror 

set grid front mx2tics my2tics lw 1.5 lt -1 lc rgb 'white' 

set xrange[-0.5:39.5] 
set yrange[-0.5:39.5] 
set x2range[-0.5:39.5] 
set y2range[-0.5:39.5] 

plot "Mat" matrix w image notitle 

隨着gnuplot 4.6版本,這需要設定明確的範圍,使xx2(未使用!)是平等的。信息可能會從數據文件中提取stats

使用版本5可讓您使用set link。而不是所有的set *range的東西。你可以使用:

set autoscale fix 
set link x 
set link y 

結果:

enter image description here

+0

真棒,好評論!謝謝你克里斯托弗! – Kai

+0

現在,這是另一個問題。我有一個更大的矩陣80x80,標籤看起來很忙。我想避開抽搐之下的數字,但保持抽搐自己顯示網格。 – Kai

+0

我用'set format y'「'把它們去掉了。 – Kai