pgfplots: Werte extern eingelesener Daten skalieren

Tabellen und Grafiken erstellen und anordnen


Trottolotti
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Di 17. Jan 2012, 14:16

pgfplots: Werte extern eingelesener Daten skalieren

Beitrag von Trottolotti »

Hallo Zusammen,
beim Plotten von Diagrammenmit pgfplots im Rahmen meiner Studienarbeit steh ich vor einem Problem:
Ich lese wie im Beispiel die Daten für die Diagramme aus sehr vielen .txt-Dateien ein, das klappt auch super. Die Zeitwerte sind in diesen Dateien in der Einheit Sekunden gespeichert, die x tick labels werden momentan als Potenzen (bsp.: 1.5*10^-3) angezeigt. Meinem Betreuer gefällt dies nicht, er hätte gerne das gerne als 0.00x und je nach Diagramm in Millisekunden oder Mikrosekunden, damit es nicht zu viele Nuller werden.
Damit ich nicht alle Rohdaten ändern muss, suche ich jetzt nach einer Möglichkeit, die Werte der externen Daten beim Plotten zu skalieren,
also dass ich z.B. alle x-Werte mit einem Vorfaktor multiplizieren kann.
Ich hoffe das ist so einigermaßen verständlich?
Eine identische Fragestellung habe ich in diesem Thread gefunden, aufgrund fehlenden Minimalbeispiels gab es dort allerdings nie eine Lösung.
Es wäre super wenn ihr mir helfen könnten.
Vielen Dank schonmal,
T.
\documentclass{scrartcl}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{
 x tick label style={/pgf/number format/1000 sep=},
 y tick label style={/pgf/number format/1000 sep=}}
\usetikzlibrary{arrows, shapes}
\tikzset{>=stealth',}
\tikzstyle{block} = [rectangle, draw, 
    text width=13.5cm, text badly centered, rounded corners, minimum height=2em]
\tikzstyle{line} = [draw,thick,->]
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
	\begin{axis}[axis x line=bottom,
		axis y line=left,
		xlabel= {Zeit [s]}, 
		xmin=0,
		xmax=0.00138,
		xtick={0.00025, 0.0005, 0.00075, 0.001, 0.00125},
		ylabel style={at={(0.0,0.56)},rotate=0},
		ylabel= {$\varphi$~[Grad]},
		ymin=-10,
		ymax=189,
		legend style = { at = {(0.9,0.3)}},
		width=\textwidth ,
		height=9cm]
\addplot+[smooth,mark=none,color=red,thick] file {1b60v2l.txt};
\addplot+[smooth,mark=none,color=blue,thick] file {3b60v52l.txt};
\legend{%
1~cm-Kanal,
3~cm-Kanal}
\end{axis}
\end{tikzpicture}
\caption[$\varphi$-\textit{t}-Diagramm 60~Vol.-\% H$_2$.]{$\varphi$-\textit{t}-Diagramm 60~Vol.-\% H$_2$; Versuche 2 und 52; linke Seite.}
\label{k60b}
\end{figure}
\end{document}
Dateianhänge
1b60v2l.txt
(401 Bytes) 333-mal heruntergeladen
3b60v52l.txt
(1.13 KiB) 365-mal heruntergeladen
Test7.tex
(1.13 KiB) 513-mal heruntergeladen
Test7.pdf
(58.88 KiB) 439-mal heruntergeladen

csaf5941
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Sa 12. Mär 2011, 20:26

Beitrag von csaf5941 »

Ohne jetzt genauer auf deine Daten einzugehen: mit `x expr` bzw. `y expr` können eingelesen Daten mit mathematischen Ausdrücken kombiniert werden (pgfplots Manual Seite 29).
\documentclass{scrartcl}
\usepackage{pgfplots}

\begin{filecontents}{\jobname.dat}
0  1000
1  3000
2  2500
3  500
4  4000
\end{filecontents} 

\begin{document}

\begin{tikzpicture}
  \begin{axis}
    \addplot table[y expr={\thisrowno{1}/1000}] {\jobname.dat};
  \end{axis}
\end{tikzpicture}

\end{document}
Noch zwei Anmerkungen: die Einheit in eckige Klammern zu setzen ist – obwohl häufig verwendet – mathematisch eigentlich nicht korrekt. Ein Formelzeichen in eckigen Klammern gibt die Einheit an; z.B. `[Zeit] = s`. Ich würde an deiner Stelle die Achsen mit `\phi in °` bzw. `Zeit in s` beschriften.
Und für das Setzen von Einheiten bzw. physikalischen Größen würde ich dir das `siunitx` Paket empfehlen.

Schöne Grüße
Johannes

Trottolotti
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Di 17. Jan 2012, 14:16

Beitrag von Trottolotti »

Super, so hats geklappt!!
Das mit den Einheiten werd ich mir auch noch zu Herzen nehmen.
Ganz vielen Dank,
T.

Antworten