GNUplot - segregacja wartości na osiach

Ogólne pogawędki i dywagacje

GNUplot - segregacja wartości na osiach

Postprzez woody28 » Cz lut 15, 2018 1:10 am

Realizuję projekt odczytu temperatury zewnętrznej w przedziale 24-godz. w interwale jednogodzinnym oraz wyniki wyświetlam w czasie rzeczywistym na wykresie generowanym automatycznie na serwerze Debian w GNUplot. Odczyt temperatury zapisuje do pliku w formie dwóch kolumn(pierwsza pełna godzina, druga temperatura).
Problem polega na tym, że GNUplot segreguje wartości na osi X od najmniejszej do największej tj. od 0...do 23. Potrzebuję by program zaznaczał wartości na osi w kolejności dokładnie takiej jak jest w pliku danych, co pozwoli na generowanie czytelniejszego wykresu(pełną dobę wstecz do godziny wyświetlenia wykresu) Mam nadzieję, że w miarę zrozumiale opisałem problem. Poniżej przykład danych wykonanych o godz 13-stej i wygenerowany wykres oraz kod.
13 3.25
14 3.06
15 1.06
16 0.31
17 0.25
18 0.25
19 -0.19
20 -0.19
21 -0.50
22 -0.50
23 -0.62
00 -0.56
01 -0.94
02 -1.00
03 -1.31
04 -1.50
05 -1.50
06 -1.50
07 -1.81
08 -1.31
09 -0.69
10 -0.69
11 0.50
12 0.12

wykres.png
wykres.png (7.22 KiB) Przeglądane 449 razy

Kod: Zaznacz cały   Rozszerz widokZwiń widok
#!/usr/bin/gnuplot
reset
set terminal png small size 800,600;
set output '/baza/wymiany/wykres.png';
set xlabel " Godzina" font "Arial-Bold, 14";
set ylabel " Temp. w C" font "Arial-Bold, 14";
set title'Wykres temperatury w czasie dobowym';
set  xtics nomirror; #usuniecie obramowania
set  ytics nomirror;
set border 3;
set xtics 2;
set grid;
unset key;
plot "/home/log/dane_wyk.txt" using 1:2 with linespoints linetype 3 linewidth 2 pointtype 7

Pewnie można by to zrobić za pomocą pętli "for" ale to już wyższa szkoła jazdy.
Może ktoś kojarzy polecenie, które mi umknęło w dokumentacji gnuplota do braku segregacji danych na osi X?
OpenOffice 2.4 pod Ubuntu 9.04
woody28
 
Posty: 2
Dołączył(a): Śr lut 14, 2018 11:22 pm

Re: GNUplot - segregacja wartości na osiach

Postprzez Jan_J » Cz lut 15, 2018 4:47 pm

Gnuplotowe zaklęcie
plot "datafile" using 1:2 with lp
potrakuje kolumnę 1 jako źródło danych dla osi X, a 2 jako dane dla osi Y.
W przypadku tylko dwóch kolumn w pliku klauzulę using 1:2 można pominąć.

Jeżeli przyjąć, że w Twoim problemie częstotliwość odczytów jest stała, znaczy to że pierwsza kolumna w pliku zawiera etykietki dla osi poziomej, druga wartości rzędnych, a odciętymi są liczby porządkowe.

Ograniczenie do pojedynczej kolumny, powiedzmy drugiej:
plot "datafile" using 2 with lp
nakreśli dane z 2 kolumny na osi Y z uwzględnieniem ich kolejności na osi X.
Tyle z pamięci, bo składni etykiet nie używam na codzień.

Pomógł nieoceniony stackoverflow: np. https://stackoverflow.com/questions/480 ... in-gnuplot
Wg recepty (w samym poście chodzi o coś trochę innego),
plot "datafile" using 2:xticlabel(1) with lp
jest OK.
To samo zresztą da się znaleźć w helpie, choć być może większym wysiłkiem.

W przypadku zmiennych odległości między odczytami nie ma siły, będzie trzeba prowadzić jakąś rachubę "czasu". Nie jestem pewien, czy damy wtedy radę bez dodatkowej kolumny (potrzebne jest kumulowanie wartości z kolumny i ich skalowanie, może to się da zrobić automagicznie).
JJ
LO Still (6.2) ∙ AOO 4.1.7 ∙ Python (3.7|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 3993
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: GNUplot - segregacja wartości na osiach

Postprzez woody28 » Pn lut 19, 2018 12:15 am

SUPER, o to chodziło. :D
Kod: Zaznacz cały   Rozszerz widokZwiń widok
plot "datafile" using 2:xticlabel(1) with lp

Szukać w helpie szukałem, ale pod złym hasłem.
Dziękuję
OpenOffice 2.4 pod Ubuntu 9.04
woody28
 
Posty: 2
Dołączył(a): Śr lut 14, 2018 11:22 pm


Powrót do Pogawędki

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości