我使用以下gnuplot
命令創建一個情節:gnuplot,如何標籤只有某些點?
#!/bin/bash
gnuplot << 'EOF'
set term postscript portrait color enhanced
set output 'out.ps'
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $1:'aaa') w labels
EOF
其中data_file
看起來是這樣的:
O4 -1.20 -0.33 -5.20
O9.5 -1.10 -0.30 -3.60
B0 -1.08 -0.30 -3.25
B0.5 -1.00 -0.28 -2.60
B1.5 -0.90 -0.25 -2.10
B2.5 -0.80 -0.22 -1.50
B3 -0.69 -0.20 -1.10
我想GNUPLOT在列中找到字符串標記所有點1
,除了其中列4
等於-3.60
在這種情況下我想aaa
條NG。我得到的是$4=-3.60
數據點被正確標記爲aaa
,但其餘的沒有被標記爲在所有。
更新:gnuplot的具有示出使用條件語句,即標籤號沒有問題:任何列,但1
正確地顯示爲每個點尊重強加的條件的標籤。也就是說,該行顯示列2
(numbres)爲點標籤尊重的條件語句:
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $2:'aaa') w labels
更新2:它還在爲點標籤,如果我繪製它作爲一個繪製列1
沒問題整個,即不使用一個條件語句。也就是說,該線圖正確所有點標籤欄1
(串):
plot 'data_file' u 3:2 w points , '' u 3:2:1 w labels
所以很明顯的問題是,在使用條件語句一起與琴絃柱。這些單獨使用的任何工作都很好。
此解決方案對我無效。我所得到的是一個單一的標籤('aaa'),它代表OP要刪除的一個標籤...執行'sprintf(「%d」,$ 1)'只適用於列1中的數據是整數。做'sprintf(「%s」,$ 1)'也行不通。我在這裏錯過了什麼嗎? – mgilson
我沒有gnuplot檢查,但如果第一列的第一行不包含數字(在這種情況下不應該需要整個sprintf的東西),可能會有所不同。我承認我在我的數據文件上嘗試過,而不是完全在OP上...我也會嘗試'(($ 4!= - 3.60)?'')。$ 1:'aaa''只強制字符串轉換如果需要的話。 –
下面的工作'($ 4 ne'-3.60'?stringcolumn(1):'')'(stringcolumn是比使用字符串連接更好的方法),但是這個測試真的很脆弱,因爲它正在做一個字符串比較'-3.60'而不是浮點數比較(例如-3.6仍然會在那裏放置一個標籤)。這裏的問題是因爲gnuplot正在繪製標籤,所以期望字段在該字段中(將第4列轉換爲字符串輸入它似乎)。這也使輸出中的那個(空)字符串膨脹它。最好的解決方案是我在下面提出的那個(恕我直言) - 只要移動過濾器,它就可以正常工作 – mgilson