Tôi đang sử dụng gnuplot
lệnh sau để tạo ra một âm mưu:gnuplot, cách chỉ gắn nhãn một số điểm nhất định?
#!/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
nơi data_file
trông như thế này:
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
Tôi muốn gnuplot nhãn tất cả điểm với chuỗi tìm thấy trong cột 1
, ngoại trừ nơi cột 4
bằng -3.60
trong trường hợp này, tôi muốn có dấu phẩy là aaa
ng. Điều tôi nhận được là điểm dữ liệu $4=-3.60
đang được gắn nhãn chính xác là aaa
, nhưng phần còn lại không được gắn nhãn ở tất cả.
Cập nhật: gnuplot không có vấn đề cho thấy số như nhãn sử dụng câu lệnh điều kiện, ví dụ: bất kỳ cột nhưng 1
được hiển thị một cách chính xác như một nhãn cho mỗi điểm tôn trọng các điều kiện áp dụng. Đó là, dòng này sẽ hiển thị cột 2
(numbres) như nhãn điểm tôn trọng tuyên bố có điều kiện:
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $2:'aaa') w labels
Cập nhật 2: Nó cũng không có vấn đề trong âm mưu cột 1
như nhãn điểm nếu tôi vẽ nó như là một toàn bộ, tức là không sử dụng câu lệnh có điều kiện. Đó là, dòng này âm mưu chính xác tất cả nhãn điểm trong cột 1
(chuỗi):
plot 'data_file' u 3:2 w points , '' u 3:2:1 w labels
Vì vậy, rõ ràng vấn đề là trong sử dụng câu lệnh điều kiện cùng với cột dây. Bất kỳ cách nào trong số này được sử dụng riêng đều hoạt động tốt.
Giải pháp này không hiệu quả đối với tôi. Tất cả những gì tôi nhận được là một nhãn đơn ('aaa') đại diện cho một nhãn mà OP muốn xóa ... làm 'sprintf ("% d ", $ 1)' chỉ hoạt động nếu dữ liệu trong cột 1 là số nguyên. làm 'sprintf ("% s ", $ 1)' cũng không hoạt động. Am i thiếu cái gì ở đây? – mgilson
Tôi không có gnuplot xung quanh để kiểm tra, nhưng có lẽ nó khác nhau nếu dòng đầu tiên của cột 1 không chứa một số (trong trường hợp đó toàn bộ điều sprintf không cần thiết). Tôi thú nhận tôi đã thử nó trên một datafile của tôi, và không chính xác trên OP của một ... Tôi cũng sẽ cố gắng '(($ 4! = - 3.60)? ''. $ 1: 'aaa'' để buộc chuyển đổi chuỗi chỉ –
Các công trình sau đây ($ 4 ne '-3.60'? stringcolumn (1): '') '(stringcolumn là một cách tốt hơn so với sử dụng chuỗi nối), nhưng thử nghiệm này thực sự khá mong manh vì nó đang làm một chuỗi so sánh trên '-3.60' thay vì so sánh float (ví dụ -3.6 vẫn sẽ đặt nhãn trên đó) Vấn đề ở đây là vì gnuplot đang vẽ nhãn, nó mong đợi các chuỗi trong trường đó (chuyển đổi cột 4 thành chuỗi trên Điều này cũng để lại (trống) chuỗi trong đầu ra mà thổi phồng nó. Giải pháp tốt nhất là một trong những tôi đề xuất dưới đây (IMHO) - chỉ cần di chuyển các bộ lọc và nó hoạt động tốt – mgilson