x-Achse im Format mm:ss.0

Tabellen und Grafiken erstellen und anordnen


Ben
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: Di 22. Jul 2014, 10:33
Wohnort: Homburg

x-Achse im Format mm:ss.0

Beitrag von Ben »

Hallo,

ich möchte von einen Messschrieb eines Datenloggers ein Diagramm erstellen. Es handelt sich um über 2000 Datensätze. Hier ein kleiner Auszug:
X	Y1	Y2	Y3	Y4
00:00.0	25	25	25	24.9
00:00.5	25	25	25	24.9
00:01.0	25.2	25.1	25.1	25
00:01.5	25.7	25.2	25.5	25.2
00:02.0	26.7	25.6	26.3	25.6
00:02.5	27.7	25.9	27.3	26.1
00:03.0	28.7	26.3	28.2	26.6
00:03.5	29.7	26.8	29.3	27.2
00:04.0	30.6	27.3	30.3	27.7
00:04.5	31.6	27.7	31.4	28.3
00:05.0	32.6	28.1	32.5	28.9
00:05.5	33.6	28.7	33.6	29.4
00:06.0	34.4	29.1	34.6	30.1
00:06.5	35.4	29.7	35.7	30.6
00:07.0	36.3	30.2	36.7	31.3
00:07.5	37.2	30.7	37.7	31.8
00:08.0	38.1	31.3	38.6	32.4
00:08.5	38.9	31.7	39.6	33
00:09.0	39.7	32.3	40.4	33.7
00:09.5	40.5	32.8	41.3	34.2
00:10.0	41.3	33.3	42.2	34.8
Ich möchte vier Grafen (Y1,Y2,Y3,Y4) über der X-Achse (X) im Format mm:ss.0 darstellen. Für andere Diagramme habe ich bisher mit pgfplots gearbeitet. Allerdings bekomm ich es damit nicht hin.

Hier noch mein Versuch:
\documentclass[paper=a4,parskip]{scrreprt}
\usepackage{graphicx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\pgfplotsset{/pgf/number format/use comma}

\begin{document}

	\begin{figure}[htb]
		\centering
		\begin{tikzpicture}
		\begin{axis}[width=0.6\textheight, 		
		height=0.4\textheight, 
		xlabel={Zeit [mm:ss.0]},
		ylabel={Temperatur[Celsius]},
		ymajorgrids,
		legend pos=outer north east,
		legend cell align=left,
		legend style={draw=none}]
		\addplot[color=black,mark=none] table [x=X,y=Y1] {Daten/ErwaermUndAbkuehlkurve.csv};		
		\addplot[color=blue,mark=none] table [x=X,y=Y2] {Daten/ErwaermUndAbkuehlkurve.csv};
		\addplot[color=red,mark=none] table [x=X,y=Y3] {Daten/ErwaermUndAbkuehlkurve.csv};
		\addplot[color=red,mark=none] table [x=X,y=Y4] {Daten/ErwaermUndAbkuehlkurve.csv};
		\legend{S1.1, S1.2, S2.1, S2.2}
		\end{axis}
		\end{tikzpicture}
	\end{figure}
\end{document} 
Hat jemand einen Lösungsvorschlag für mich?

Gruß

Ben

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Ergänze
       xtick=data,
       xticklabels from table={mydata.csv}{X},
       xticklabel style={rotate=90,anchor=east},
bei den axis Optionen und ändere bei den plots x=X zu
x expr=\coordindex
Kompletter Code:
\begin{filecontents}{mydata.csv}
X   Y1   Y2   Y3   Y4 
 00:00.0   25   25   25   24.9 
 00:00.5   25   25   25   24.9 
 00:01.0   25.2   25.1   25.1   25 
 00:01.5   25.7   25.2   25.5   25.2 
 00:02.0   26.7   25.6   26.3   25.6 
 00:02.5   27.7   25.9   27.3   26.1 
 00:03.0   28.7   26.3   28.2   26.6 
 00:03.5   29.7   26.8   29.3   27.2 
 00:04.0   30.6   27.3   30.3   27.7 
 00:04.5   31.6   27.7   31.4   28.3 
 00:05.0   32.6   28.1   32.5   28.9 
 00:05.5   33.6   28.7   33.6   29.4 
 00:06.0   34.4   29.1   34.6   30.1 
 00:06.5   35.4   29.7   35.7   30.6 
 00:07.0   36.3   30.2   36.7   31.3 
 00:07.5   37.2   30.7   37.7   31.8 
 00:08.0   38.1   31.3   38.6   32.4 
 00:08.5   38.9   31.7   39.6   33 
 00:09.0   39.7   32.3   40.4   33.7 
 00:09.5   40.5   32.8   41.3   34.2 
 00:10.0   41.3   33.3   42.2   34.8 
\end{filecontents}

\documentclass[paper=a4,parskip]{scrreprt} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.9} 
\pgfplotsset{/pgf/number format/use comma} 

\begin{document} 

    \begin{figure}[htb] 
       \centering 
       \begin{tikzpicture} 
       \begin{axis}[width=0.6\textheight,       
       height=0.4\textheight, 
       xlabel={Zeit [mm:ss.0]}, 
       ylabel={Temperatur[Celsius]}, 
       ymajorgrids,
       xtick=data,
       xticklabels from table={mydata.csv}{X},
       xticklabel style={rotate=90,anchor=east},
       legend pos=outer north east, 
       legend cell align=left, 
       legend style={draw=none}] 
       \addplot[color=black,mark=none] table [x expr=\coordindex,y=Y1] {mydata.csv};       
       \addplot[color=blue,mark=none] table [x expr=\coordindex,y=Y2] {mydata.csv}; 
       \addplot[color=red,mark=none] table [x expr=\coordindex,y=Y3] {mydata.csv}; 
       \addplot[color=red,mark=none] table [x expr=\coordindex,y=Y4] {mydata.csv}; 
       \legend{S1.1, S1.2, S2.1, S2.2} 
       \end{axis} 
       \end{tikzpicture} 
    \end{figure} 
\end{document} 
Um nur die xticklabel mit vollen Sekunden anzeigen zu lassen, fällt mir gerade nichts besseres ein als eine weitere Tabelle zu verwenden.
\begin{filecontents}{mydata.csv}
X   Y1   Y2   Y3   Y4 
 00:00.0   25   25   25   24.9 
 00:00.5   25   25   25   24.9 
 00:01.0   25.2   25.1   25.1   25 
 00:01.5   25.7   25.2   25.5   25.2 
 00:02.0   26.7   25.6   26.3   25.6 
 00:02.5   27.7   25.9   27.3   26.1 
 00:03.0   28.7   26.3   28.2   26.6 
 00:03.5   29.7   26.8   29.3   27.2 
 00:04.0   30.6   27.3   30.3   27.7 
 00:04.5   31.6   27.7   31.4   28.3 
 00:05.0   32.6   28.1   32.5   28.9 
 00:05.5   33.6   28.7   33.6   29.4 
 00:06.0   34.4   29.1   34.6   30.1 
 00:06.5   35.4   29.7   35.7   30.6 
 00:07.0   36.3   30.2   36.7   31.3 
 00:07.5   37.2   30.7   37.7   31.8 
 00:08.0   38.1   31.3   38.6   32.4 
 00:08.5   38.9   31.7   39.6   33 
 00:09.0   39.7   32.3   40.4   33.7 
 00:09.5   40.5   32.8   41.3   34.2 
 00:10.0   41.3   33.3   42.2   34.8 
\end{filecontents}

\begin{filecontents}{mylabel.csv}
X
 00:00.0
 00:01.0
 00:02.0
 00:03.0
 00:04.0
 00:05.0
 00:06.0
 00:07.0
 00:08.0
 00:09.0
 00:10.0
\end{filecontents}

\documentclass[paper=a4,parskip]{scrreprt} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.9} 
\pgfplotsset{/pgf/number format/use comma} 

\begin{document} 

    \begin{figure}[htb] 
       \centering 
       \begin{tikzpicture} 
       \begin{axis}[width=0.6\textheight,       
       height=0.4\textheight, 
       xlabel={Zeit [mm:ss.0]}, 
       ylabel={Temperatur[Celsius]}, 
       ymajorgrids,
       xtick={0,2,...,100},
       xticklabels from table={mylabel.csv}{X},,
       xticklabel style={rotate=90,anchor=east},
       legend pos=outer north east, 
       legend cell align=left, 
       legend style={draw=none}] 
       \addplot[color=black,mark=none] table [x expr=\coordindex,y=Y1] {mydata.csv};       
       \addplot[color=blue,mark=none] table [x expr=\coordindex,y=Y2] {mydata.csv}; 
       \addplot[color=red,mark=none] table [x expr=\coordindex,y=Y3] {mydata.csv}; 
       \addplot[color=red,mark=none] table [x expr=\coordindex,y=Y4] {mydata.csv}; 
       \legend{S1.1, S1.2, S2.1, S2.2} 
       \end{axis} 
       \end{tikzpicture} 
    \end{figure} 
\end{document} 
Gruß
Elke

Ben
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: Di 22. Jul 2014, 10:33
Wohnort: Homburg

Beitrag von Ben »

Wunderbar :D

Vielen Dank für die schnelle und kompetente Hilfe !

prankenandi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 60
Registriert: Di 8. Apr 2014, 13:59

Beitrag von prankenandi »

Hallo,

sollte das Zeitformat deines Datenloggers ein Zeitstempel (in Bezug auf Uhrzeit) sein, dann schau mal in PGFplot-Manual nach

4.22.2 Dates as Input Coordinates

Vielleicht ist dort etwas nützliches dabei?!?!


MfG
Debian 7 (Wheezy) mit Texlive 2013 und Texmaker

Ben
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: Di 22. Jul 2014, 10:33
Wohnort: Homburg

Beitrag von Ben »

Danke. Damit habe ichs am Anfang versucht. War leider nicht von Erfolg gekrönt. Das kann aber auch daran gelegen haben, dass ich es nicht richtig gemacht habe :)
Glücklicherweise funktioniert Elkes Lösung sehr gut.

Gruß

Ben

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Zitat aus dem erwähnten Abschnitt der Doku:
• \second will always be 00.
Wenn die Sekunden immer 00 sind, dann hilft schon deshalb die library (zumindest momentan) bei dem Problem nicht weiter.

KloBoBBerLe
Forum-Anfänger
Forum-Anfänger
Beiträge: 11
Registriert: Mo 27. Apr 2015, 13:33

Beitrag von KloBoBBerLe »

Liebe Leser,

bitte entschuldigt, dass ich dieses Topic nach so langer Zeit wieder auffrische...

Ich habe derzeit exakt das selbe Problem wie der Fragesteller, nur mit dem Unterschied, dass mein Datenlogger die halbsekündigen Messwerte nicht in Zwischensekunden abspeichert, sondern zwei Messwerte im selben Sekundenwert.

In Excel habe ich die Werte nun auf verschiedene Arten LaTeX-tauglich aufbereitet und als *.txt-Dateien abgespeichert:

Möglichkeit 1: Datum <tab> Zeit [hh:mm:ss] <tab> Messwert
Datum	Zeit	Messwert
2015-08-17	00:00:00	1
2015-08-17	00:00:01	2
2015-08-17	00:00:01	3
2015-08-17	00:00:02	4
2015-08-17	00:00:02	5
2015-08-17	00:00:03	6
2015-08-17	00:00:03	7
2015-08-17	00:00:04	8
2015-08-17	00:00:04	9
2015-08-17	00:00:05	10
2015-08-17	00:00:05	11
Möglichkeit 2: Datum <Leerzeichen> Zeit [hh:mm:ss] <tab> Messwert
Datum	Messwert
2015-08-17 00:00:00	1
2015-08-17 00:00:01	2
2015-08-17 00:00:01	3
2015-08-17 00:00:02	4
2015-08-17 00:00:02	5
2015-08-17 00:00:03	6
2015-08-17 00:00:03	7
2015-08-17 00:00:04	8
2015-08-17 00:00:04	9
2015-08-17 00:00:05	10
2015-08-17 00:00:05	11
Möglichkeit 3: Zeit [hh:mm:ss] <tab> Messwert
Zeit	Messwert
00:00:00	1
00:00:01	2
00:00:01	3
00:00:02	4
00:00:02	5
00:00:03	6
00:00:03	7
00:00:04	8
00:00:04	9
00:00:05	10
00:00:05	11
Möglichkeit 4: Zeit [mm:ss] <tab> Messwert
Zeit	Messwert
00:00	1
00:01	2
00:01	3
00:02	4
00:02	5
00:03	6
00:03	7
00:04	8
00:04	9
00:05	10
00:05	11
Sofern ich date coordinates in = x setze, dann erfordert LaTeX so weit ich weiß zwangsläufig ein Tagesdatum.

In meinem Diagramm benötige ich lediglich die Angabe mm:ss (Minuten:Sekunden) sowie die Messwerte, das Datum ist völlig irrelevant. Gerne darf auch bei Erreichen einer vollen Stunde Minute 60 aufgeführt werden anstatt 01:00:00...

Wie könnte ich das denn lösen?

Ganz herzlichen Dank für Eure Unterstützung! :)

Viele Grüße
KloBoBBerLe

Antworten