PGFPLOTS - bekomme maximale Abweichung zwischen zwei Plots

Tabellen und Grafiken erstellen und anordnen


Avernus
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Fr 24. Mai 2013, 19:04

PGFPLOTS - bekomme maximale Abweichung zwischen zwei Plots

Beitrag 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

Stamm-

Das kommt darauf an

Beitrag 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.

Avernus
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Fr 24. Mai 2013, 19:04

Minimalbeispiel ergänzt

Beitrag 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]
Dateianhänge
Unbenannt.PNG
Unbenannt.PNG (32.75 KiB) 1592 mal betrachtet

Stamm-

Zwei Varianten für die Markierung

Beitrag 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).
  1. Mit \node und der Option pin eine Art Stecknadel an der entsprechenden Stelle des Graphen setzen (s. Abschnitt 17.10.3).
  2. 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}

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

Beitrag 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.

Antworten