Die Fläche zwischen zwei (hier vereinfachten) Graphen kann mit pgfplots zum Beispiel so gefüllt werden:

\documentclass[margin=5mm]{standalone} 
\usepackage{pgfplots} 
\usepackage{filecontents}

\begin{filecontents}{plotdata.dat}
-2.5 0.5 -0.5 
-1 -1 1
0 0 0
1 1 -1
2.5 -0.5 0.5 
\end{filecontents}

\begin{document} 
\begin{tikzpicture} 
\begin{axis}
  \addplot[green]table[x index={0}, y index={1}]{plotdata.dat}; 
  \addplot[red]table[x index={0}, y index={2}]{plotdata.dat};

  \addplot[draw=none,stack plots=y,forget plot] table [y index={1}]{plotdata.dat}; 
  \addplot[draw=none, fill=gray, opacity=.5,stack plots=y]
    table [y expr=\thisrowno{2}-\thisrowno{1}] {plotdata.dat}\closedcycle; 
\end{axis} 
\end{tikzpicture} 
\end{document}

alt text

Nun soll aber die Farbe der Fläche grün sein, wenn der grüne Graph oberhalb des roten liegt. Im umgekehrten Fall soll die Fläche dagegen rot gefüllt werden.

Wie kann ich das erreichen?

gefragt 13 Nov '13, 11:23

esdd's gravatar image

esdd
18.9k52746
Akzeptiert: 92%

3

Automatische unterstuetzung fuer so ein Feature ist gerade in Arbeit. Voraussichtlich wird pgfplots ab der naechsten Version diese Aufgabe unterstuetzen.

(16 Nov '13, 12:53) cfeuersaenger

@cfeuersaenger: Super, dann ist ja eine praktikable Lösung in Aussicht.

(16 Nov '13, 18:29) esdd

Da Version 1.10 von pgfplots jetzt veröffentlicht ist, gibt es eine einfache Lösung für das Problem. Dazu muss die neue Bibliothek fillbetween geladen werden.

Open in writeLaTeX
\documentclass[margin=5mm]{standalone} 
\usepackage{pgfplots}
\pgfplotsset{compat=1.10} % mit writeLaTeX bisher noch nicht möglich
\usepgfplotslibrary{fillbetween}
\usepackage{filecontents}

\begin{filecontents}{plotdata.dat}
-2.5 0.5 -0.5 
-1 -1 1
0 0 0
1 1 -1
2.5 -0.5 0.5 
\end{filecontents}

\begin{document} 
\begin{tikzpicture} 
\begin{axis}
  \addplot[name path=plot1,green]table[x index={0}, y index={1}]{plotdata.dat}; 
  \addplot[name path=plot2,red]table[x index={0}, y index={2}]{plotdata.dat};
  % Füllung zwischen plots
  \addplot fill between[ 
    of=plot1 and plot2, 
    split, % Segmente berechnen lassen, Zählung beginnt bei 0 (also gerader Zahl)
    every even segment/.style= {green!10}, % Stil für die geraden Segmente
    every odd segment/.style={red!10}, % Stil für die ungeraden Segmente
 ]; 
\end{axis} 
\end{tikzpicture} 
\end{document}

alt text

Permanenter link

beantwortet 05 Mär '14, 04:51

esdd's gravatar image

esdd
18.9k52746

bearbeitet 05 Mär '14, 05:51

Als erstes muss man die Schnittpunkte der Plots bestimmen. Dann vier weitere Datensätze hinzufügen und jeweils in den Abschnitten zwischen zwei Schnittpunkten Null setzen:

\documentclass[margin=5mm]{standalone} 
\usepackage{pgfplots} 
\usepackage{filecontents}

\begin{filecontents}{plotdata.dat}
-2.5 0.5 -0.5 0.5 -0.5 0 0
-2 0 0 0 0 0 0
-1 -1 1 0 0 -1 1
0 0 0 0 0 0 0
1 1 -1 1 -1 0 0
2 0 0 0 0 0 0
2.5 -0.5 0.5 0 0 -0.5 0.5 
\end{filecontents}

\begin{document} 
\begin{tikzpicture} 
\begin{axis}
  \addplot[green]table[x index={0}, y index={1}]{plotdata.dat}; 
  \addplot[red]table[x index={0}, y index={2}]{plotdata.dat};

  \addplot[draw=none,stack plots=y,forget plot] table [y index={1}]{plotdata.dat}; 
  \addplot[draw=none, fill=green, opacity=.5,stack plots=y]
    table [y expr=\thisrowno{4}-\thisrowno{3}] {plotdata.dat}\closedcycle; 
  \addplot[draw=none, fill=red, opacity=.5,stack plots=y]
    table [y expr=\thisrowno{6}-\thisrowno{5}] {plotdata.dat}\closedcycle; 
\end{axis} 
\end{tikzpicture} 
\end{document}

alt text

Permanenter link

beantwortet 14 Nov '13, 15:08

sudo's gravatar image

sudo
1.6k1515

@sudo: Vielen Dank für deinen Vorschlag, der allerdings mit viel „Handarbeit“ verbunden ist, vor allem wenn die Kurven komplizierter werden.

(16 Nov '13, 18:35) esdd
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×142

Frage gestellt: 13 Nov '13, 11:23

Frage wurde angeschaut: 3,404 Mal

Zuletzt aktualisiert: 05 Mär '14, 05:51