Mam plik danych .csv utworzony przez inną aplikację innej firmy, który powinien zostać wykreślony przy użyciu gnuplot
. Załóżmy, że plik ma następujący format:Gnuplot: Najkrótszy sposób ignorowania pierwszego wiersza pliku danych
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
pierwszej kolumnie jest oś x, następujące kolumny należy przedstawić na wykresie jako własnego lineplot (tak, wiem, zbyt wiele działek linii w jednej działki może wyglądają źle, ale żeby się zorientować). Tutaj 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"
Problem polega na tym, że to także kreśli pierwszy wiersz, tak jak byłoby to dane.
Wiem, że można zignorować dowolny wiersz w pliku danych, uruchamiając go z #
, jak #1;2;3;4;5;6
, ale nie chcę edytować pliku, ponieważ jest on również używany przez inne narzędzia.
Innym sposobem jest użycie plot <filename> every ::1
ignorować pierwszą linię, co oznaczałoby, że musiałbym to every ::1
5 razy w powyższym scenariuszu, jak wyjaśniono in this link. To będzie wyglądać następująco:
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"
jest zdefiniowanie every ::1
dla każdej działki naprawdę jedyny sposób? Czy istnieje jakiś krótszy - najlepiej jeden - liniowy - sposób ignorowania pierwszej (ych) linii; jakiś sposób zdefiniowania globalnego "every ::1
" lub czegoś podobnego (pseudokod) set datafile ignorefirstnlines 1
?
Czy 'every :: 1' naprawdę jest takie złe? Wydaje mi się to eleganckie. Skąd pochodzą napisy tytułowe "B", "C" itp.? Czy są nagłówkami kolumn? – e0k
Nie "tak źle", ale uznałbym to za bardziej eleganckie, gdyby można to było zrobić w jednym oświadczeniu zamiast w każdym spisku. Jeśli wyobrażam sobie wykres słupkowy z 5 różnymi paskami i dodatkowymi paskami błędów, to spowoduje to 10 instrukcji narysowania, a zatem 10 "every :: 1". I tak, '" A "," "B" 'itp. To tylko przykładowe nagłówki kolumn, które powinny być wyświetlane w kluczu/legendzie. –
Czy wiesz o iteracji wykresu? Wpisz 'help plot iteration' z monitu' gnuplot'. – e0k