2013-02-19 33 views
1

這個線程在這裏: Custom string in xticlabels自定義字符串xticlabels在gnuplot的

解決定製xticlabel串的問題。

現在,我如何對第4列(例如)中的數據進行排序,以便僅使用第4列中包含某些字符串的行來創建xticlabel? IOW,什麼是正確的格式:(IF strcol(4)eq「Sunrise」)plot'datafile'u 4:2 :(xticlabels(strcol(4).strcol(2)))

回答

1

鑑於此數據文件:

Sunrise cat 1 
Sunset dog 2 
Sunrise fish 3 
waste space 4 
blah blah 5 
Sunrise label 6 

我們可以用下面這行繪製它:

plot 'test.dat' u 3:xticlabels(strcol(1) eq 'Sunrise'?strcol(1).strcol(2):'') 

,它創造這樣的情節:

enter image description here

基本上我在那裏做的是我查看了第1列中的字符串,如果它是「Sunrise」,我將它與第2列中的字符串連接在一起。如果它不是「Sunrise」,則返回一個空字符串以防止放置在那裏的標籤。但是,這會在每個數據點的位置放置一個主要的抽搐。爲了避免這種情況,你可以使用以下命令:

plot 'test.dat' u 3:xticlabels(strcol(1) eq 'Sunrise'?strcol(1).strcol(2):NaN) 

產生這個圖(我上的gnuplot 4.4.2和4.6.0測試):

enter image description here

它還發出一堆關於非字符串標籤的警告,但我想沒關係。

+0

謝謝。很有用。現在,如果我想捕獲第1列中包含「Sun」的所有項目,那麼這是如何完成的?我找到了使用「strcol(1)」[1:3]的建議,但似乎無法使其在此工作。 awk在這裏更有用嗎?我不確定如何將其格式化爲xticlabels設置。 – Dan 2013-02-21 10:12:47

+1

@丹 - 我相信你可以使用'strstr'來檢查列是否包含子字符串:'...使用3:xticlabels(strstr(strcol(1),'Sun')?strcol(1):NaN) ' – mgilson 2013-02-21 13:33:02

+0

@ mgilson - 它可以正常工作: >「」1:2:xticlabels(substr(strcol(4),1,3)eq'Sun'?strcol(4)。「:」。strcol(2 ):NaN),但我沒有意識到這個問題更加複雜:我正在繪製日出和日落都出現在同一個24小時內的數據,所以第二個「太陽」總是踩在第一個上面。 我不能彎曲我的頭如何將兩個事件連接成單個xtics字符串::xticlabels(日出:時間。「」。日落:時間) > 2011-10-03 06:39日出 > 2011-10- 03 18:17日落 – Dan 2013-02-26 13:11:27