2016-12-26 27 views
1

我有一個數據矩陣,它是自動音樂轉錄程序的輸出。我想用gnuplot來繪製它,分配適當的標籤。 Here's my dropbox with some data,其中Intensity.dat是實際的數據,example.stn是字符串值的列,其中一些是對Y軸和example.all顯示只是paste example.stn Intensity.dat > example.all腳本的結果:如何抽取/減少gnuplot矩陣中抽動標籤的數量

reset 
set title "Intensity detection" 
set palette negative grayscale 
set cbrange [0.01:1] 
set xlabel "Time [s]" 
set ylabel "Musical note" 
set terminal qt font "Verdana,16" 
set logscale cb 
xincr=0.04644 
yincr=1 
plot 'example.all' u (($1+0.5)*xincr):($2*yincr):3 matrix with image 

生產 plot produced by script 1。一切都OK,現在只是抽動標籤...

後,我的最後一行更改爲plot 'example.all' u (($1+0.5)*xincr):($2*yincr):3 matrix rowheaders with image,y軸變得太densly人口(這是從我的Dropbox plot2.jpg,在上面鏈接。對不起你們,我新的,它不允許我發佈超過2個鏈接)。 我想要的只是一種呈現我想要的標籤(或隱藏他人,不管)的方式,而不是一次一個(因爲看起來不可讀)。我還希望能夠在需要時快速將它們更改爲其他人。假設我想顯示每個第12個標籤,但仍然保留整個矩陣,並繪製所有行。或者從第二個標籤開始每12分鐘,從第6個開始每12個。我已經嘗試了很多方法,但我被卡住了。像ytics()或者yticlabels()這樣的函數不能實現,至少對我而言。是的,我需要這個Verdana 16,並且完全去除標籤是沒有問題的。

如果該方法也適用於x軸,我會特別感激,因爲我在其他圖中有與x軸類似的問題,但我通常感謝任何幫助。

回答

0

可以分開繪製這樣的ytics繪製圖像:

condition(n) = (ceil(n)%12-2 == 0) || (ceil(n)%12-6 == 0) 

plot 'Intensity.dat' u (($1+0.5)*xincr):($2*yincr):3 matrix with image ,\ 
    'example.stn' u (NaN):0:ytic(condition($0) ? strcol(1) : "") notitle 

功能condition檢查標籤是否應被繪製與否。我已經使用ceil將實數轉換爲模運算符(%)所需的整數。 condition函數被調用,其編號爲$0。在繪製'example.stn'時,NaN可以避免繪製數據點,同時保持設置標籤的機會。如果條件滿足(第12個標籤從第6個開始,從第2個或第12個開始),我們使用實際標籤,否則使用空字符串。

note intensities

+0

首先,感謝您的快速回復,我相信它的解決方案。對於任何尋找x軸標籤的人來說,它是 'condition(n)=(ceil(n)%12-2 == 0)|| (($ 1)* xincr):($ 2 * yincr):3圖像矩陣,\ '示例(ceil(n)%12-6 == 0)' 和繪圖部分 'plot'example.dat'u .stn'u 0:(NaN):xtic(condition($ 0)?strcol(1):「」)notitle' – LDTV