Tôi có tệp dữ liệu .csv được tạo bởi ứng dụng bên thứ ba khác cần được vẽ bằng cách sử dụng gnuplot
. Giả sử các tập tin có định dạng sau:Gnuplot: Cách ngắn nhất để bỏ qua dòng đầu tiên trong datafile
1;2;3;4;5;6 <-- This is the header line that should be ignored (with values 1;2;...;N)
1;1;2;1;1;1
2;3;3;3;5;6
3;4;1;1;1;4
Cột đầu tiên là trục x, các cột sau mỗi nên được vẽ như lineplot riêng (vâng, tôi biết, quá nhiều thửa dòng trong một âm mưu có thể nhìn xấu, nhưng chỉ để có được một ý tưởng). Dưới đây là MCVE:
set terminal png size 1000,500
set datafile separator ";" # CSV file is seperated with ;
plot \
'C://tmp/test.csv' using 1:2 with lines title "A",\
'C://tmp/test.csv' using 1:3 with lines title "B",\
'C://tmp/test.csv' using 1:4 with lines title "C",\
'C://tmp/test.csv' using 1:5 with lines title "D",\
'C://tmp/test.csv' using 1:6 with lines title "E"
Vấn đề là, điều này cũng vẽ đường đầu tiên là dữ liệu.
Tôi biết rằng có thể bỏ qua bất kỳ dòng nào trong tệp dữ liệu bằng cách bắt đầu bằng #
, như #1;2;3;4;5;6
, nhưng tôi không muốn chỉnh sửa tệp, vì nó cũng được sử dụng bởi các công cụ khác.
Cách khác là sử dụng plot <filename> every ::1
để bỏ qua dòng đầu tiên, điều này có nghĩa là tôi sẽ phải bao gồm every ::1
5 lần trong tập lệnh ở trên, như được giải thích in this link. Điều này sẽ trông giống như sau:
set terminal png size 1000,500
set datafile separator ";" # CSV file is seperated with ;
plot \
'C://tmp/test.csv' every ::1 using 1:2 with lines title "A",\
'C://tmp/test.csv' every ::1 using 1:3 with lines title "B",\
'C://tmp/test.csv' every ::1 using 1:4 with lines title "C",\
'C://tmp/test.csv' every ::1 using 1:5 with lines title "D",\
'C://tmp/test.csv' every ::1 using 1:6 with lines title "E"
Định nghĩa every ::1
cho mỗi âm mưu thực sự là cách duy nhất? Có một số ngắn hơn - thích hợp hơn một lớp lót - cách bỏ qua (các) dòng đầu tiên (n); một số cách để xác định every ::1
"toàn cầu" hoặc một cái gì đó như (mã giả) set datafile ignorefirstnlines 1
?
Có phải 'mỗi :: 1' thực sự quá tệ? Nó có vẻ thanh lịch với tôi. Các chuỗi tiêu đề "" B "', '" C "', v.v., đến từ đâu? Chúng có phải là tiêu đề cột không? – e0k
Không phải là "quá xấu", nhưng tôi sẽ thấy nó thanh lịch hơn nếu điều này có thể được thực hiện trong một tuyên bố thay vì trong mọi cốt truyện. Nếu tôi tưởng tượng của một âm mưu thanh với 5 thanh khác nhau, và các thanh lỗi bổ sung, điều này sẽ dẫn đến 10 câu lệnh lô, và do đó 10 'mỗi :: 1'. Và có, '" A "', '" B "', v.v. chỉ là các tiêu đề cột ví dụ sẽ được hiển thị trong khóa/chú giải. –
Bạn có biết về lặp lại lô không? Gõ 'plot plot iteration' từ dấu nhắc' gnuplot'. – e0k