Mam plik .txt, w którym dwa zestaw danych znajdują się w tej samej kolumnie, ale podzielone przez niektóre znaki, tutaj przykład:

#First zestaw danych
#Time # Avelocity
1 0,3
2 0,5
3 0,8
4 1.3

#Sekundowy zestaw danych
#Time # Avelocity
1 0,7
2 0,9
3 1.8
4 2.3

Chciałbym więc wykreślić ten dwa zestaw danych jako dwie różne krzywe, a także nie wiem, ile linii ma każdy zestaw danych (lub przynajmniej ten numer może się zmienić), więc nie mogę używać każdego polecenia (jestem Szukasz komendy Gnuplot, a nie poleceń bash). Dziękuję Ci

1
Andrea 23 październik 2020, 14:54

1 odpowiedź

Najlepsza odpowiedź

Jak już wspomniałeś every nie zadziała tutaj, ponieważ masz zmienne długości zbiorów danych ( edytuj : tak, zobacz Edytuj poniżej) . W przypadku, gdy miałeś dwie puste linie, aby oddzielić twoje zestawy danych, można użyć indeksu, sprawdź help index. Jednak jeśli masz jedną pustą linię, pomoże pseudocolumn -1 pomoże. Sprawdź help pseudocolumns. Następnie możesz zdefiniować filtr z operatorem Therary, sprawdź help ternary.

Kod:

### plotting variable datasets
reset session

$Data <<EOD
#First set of data
#Time        #Velocity
1              0.3
2              0.5
3              0.8
4              1.3

#Second set of data
#Time        #Velocity
1              0.7
2              0.9
3              1.8

#Third set of data
#Time        #Velocity
1              0.9
2              1.4
3              2.6
4              3.6
5              4.8
EOD

myFilter(col,i) = column(-1)==i-1 ? column(col) : NaN

set key top left
plot for [i=1:3] $Data u 1:(myFilter(2,i)) w lp pt 7 title sprintf("Set %d",i)
### end of code

Edytuj: (jak wskazano @binzo)

Właściwie to zrobiłem zbyt skomplikowane. Tak proste, jak następująca będzie również to zrobić bez filtra (filtr może być używany w innych przypadkach). Uwaga, bloki są ponumerowane od 0.

plot for [i=1:3] $Data u 1:2 every :::i-1::i-1 w lp pt 7 title sprintf("Set  %d",i)

Wynik:

enter image description here

4
theozh 26 październik 2020, 13:04