Seite 1 von 1
PGFPLOTS - bekomme maximale Abweichung zwischen zwei Plots
Verfasst: Fr 29. Apr 2016, 14:13
von Avernus
Hallo,
ich habe mit den Befehlen "stack plots=y" und "stack dir=minus" die Differenz von zwei Plots gezeichnet. Gerne würde ich in diesem Plot den maximal Wert (absolut) markieren.
\addplot +[stack plots=y] table {testfile.dat};
\addplot +[stack plots=y,stack dir =minus]table {file.dat};
Hat jemand einen Vorschlag wie das machbar ist?
Vielen Dank.
Grüße
Das kommt darauf an
Verfasst: Fr 29. Apr 2016, 17:32
von Stamm-
Avernus hat geschrieben:[…] Hat jemand einen Vorschlag wie das machbar ist? […]
Mit einem brauchbaren Beispiel wird sich bestimmt jemand mit einem Vorschlag zur Lösung finden.
Minimalbeispiel ergänzt
Verfasst: Mo 2. Mai 2016, 13:10
von Avernus
Ok. Das stimmt mit Beispiel ist es deutlich anschaulicher.
\documentclass[article]{article}
\usepackage[ngerman]{babel}
\usepackage{tikz,pgfplots}
\usetikzlibrary{patterns,snakes}
\usetikzlibrary{arrows,automata}
\usepackage{filecontents}
\usetikzlibrary{shapes,positioning}
\begin{document}
\begin{figure}
\begin{center}
\begin{tikzpicture}
\begin{axis}
\addplot+[mark=none,color = black] table {
x y
1 2
2 1
3 3
4 2
5 1
6 2
7 0.5
};
\addplot+[mark=none,color = blue,stack plots=y] table {
x y
1 2.1
2 0.9
3 3.1
4 2.02
5 1.01
6 2.0
7 0.512
};
\addplot +[color=red,stack plots=y,stack dir =minus]table {
x y
1 2
2 1
3 3
4 2
5 1
6 2
7 0.5
};
\end{axis}
\end{tikzpicture}
\end{center}
\end{figure}
\end{document}
An dem roten Plot würde ich das absolute Maximum(|-10|> 8 ) kennzeichnen und den jeweiligen Wert dazu schreiben.
Alternativ kann ich mir auch vorstellen den roten Plot wegzulassen und die Differenz bei den beiden oberen Plots direkt einzuzeichnen.
Danke.[/img]
Zwei Varianten für die Markierung
Verfasst: Di 3. Mai 2016, 18:23
von Stamm-
Das absolute (oder globale) Maximum wie angegeben kann ich jetzt nicht erkennen. Deshalb habe ich mal die beiden lokalen Maxima markiert. Sollte das nicht dem gewünschten Ergebnis entsprechen, lässt sich das leicht anpassen.
Es gibt da zwei Möglichkeiten, die ihren Ursprung in »
PGF/TikZ« haben (auf dem »
pgfplots« ja basiert). Das ist dann entsprechend in der Anleitung nachzulesen (Kapitel 17).
- Mit \node und der Option pin eine Art Stecknadel an der entsprechenden Stelle des Graphen setzen (s. Abschnitt 17.10.3).
- Mit \draw von der zu kennzeichnenden Stelle des Graphen aus eine Linie zu einem Knoten (node) zeichnen und dort die gewünschte Markierung setzen.
Beides ist in diesem Beispiel enthalten. Wichtig ist, das zur richtigen Ausrichtung der Markierungen und somit zum Zeichnen der Verbindungslinien das Koordinatensystem der Achsenumgebung (axis cs) verwendet werden sollte.
\documentclass[11pt,border=2pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage{selinput} % Ersatz für »ìnputenc«
\SelectInputMappings{ % Halbautomatische Festlegung der
adieresis={ä}, % Eingabekodierung mit Hilfe
germandbls={ß} % ausgewählter Sonderzeichen
} % siehe: http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt
% oder: http://partners.adobe.com/public/developer/en/opentype/aglfn13.txt
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{
compat=1.13, % 1.12 für 'Overleaf'
xlabel near ticks,
ylabel near ticks
}
\begin{document}
\begin{tikzpicture}[>=stealth]
\begin{axis}[
font=\footnotesize,
xmin=0,
xmax=8,
xtick={0,1,...,8},
ymin=-1,
ymax=4
]
\addplot+[mark=none,color=black] table {
x y
1 2
2 1
3 3
4 2
5 1
6 2
7 0.5
};
\node[pin=90:Maximum] at (axis cs:1,2) {};
\node[pin=45:Maximum] at (axis cs:3,3) {};
\addplot+[mark=none,color=blue,stack plots=y] table {
x y
1 2.1
2 0.9
3 3.1
4 2.02
5 1.01
6 2.0
7 0.512
};
\addplot+[color=red,stack plots=y,stack dir=minus]table {
x y
1 2
2 1
3 3
4 2
5 1
6 2
7 0.5
};
% \node[pin=280:Maximum] at (axis cs:1,0.15) {};
% \node[pin=45:Maximum] at (axis cs:3,0.15) {};
\draw[<-,shorten >=5pt,shorten <=2pt] (axis cs:1,0.15) -- (axis cs:1.5,0.5) node {Maximum};
\draw[<-,shorten >=13pt,shorten <=2pt] (axis cs:3,0.15) -- (axis cs:4.5,0.5) node {Maximum};
\end{axis}
\end{tikzpicture}
\end{document}
Verfasst: Di 3. Mai 2016, 23:40
von esdd
Seit pgfplots Version 1.11 ist übrigens axis cs das Standardkoordinatensystem innerhalb der axis Umgebung. Selbst bei Overleaf (derzeit immer noch 1.12) darf man axis cs: also weglassen. Gibt man es trotzdem an, ist das natürlich auch kein Problem.