5
1

Hallo zusammen,

ich möchte gerne in einer pgfplots Grafik nur einen bestimmten Bereich transparent einfärben. Am besten erklärt sich das Ganze anhand des MB. Der Bereich zwischen den beiden blauen Linien soll bspw. transparent blau eingefärbt werden. Ich hab den Bereich durch zwei vertikale Linien abgegrenzt. Ich dachte, vielleicht gibt es ja die Möglichkeit, die Fläche zwischen zwei Graphen einzufärben. Andere Vorschläge sind natürlich auch willkommen. Vielen Dank schon mal.

\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

\usepackage{pgfplots}
\pgfplotsset{compat=1.8}    
\usepgfplotslibrary{dateplot}

\usepackage{tikz}
\usetikzlibrary{}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
date coordinates in=x,
xmin=2012-01-01,
xticklabel=\day.\month,
]
\addplot [no markers,blue]coordinates {
(2012-02-12, -1)
(2012-02-12, 1)
};
\addplot [no markers,blue]coordinates {
(2012-03-17, -1)
(2012-03-17, 1)
};
\addplot [red]coordinates {
(2012-01-01, -1)
(2012-02-17, -0.7)
(2012-02-27, -0.2)
(2012-03-17, 0)
(2012-03-19, -0.3)
(2012-04-7, 0.4)
(2012-04-20, 0.3)
};
\end{axis}
\end{tikzpicture}
\end{figure}

\end{document}

alt text

gefragt 01 Nov '13, 11:42

josephine's gravatar image

josephine
944223035
Akzeptiert-Rate: 0%

bearbeitet 01 Nov '13, 12:56

Thorsten's gravatar image

Thorsten
1.6k325


Es ist möglich, direkt auf das Koordinatensystem innerhalb der Achsen zuzugreifen (axis cs). Daher lässt sich für den in Frage kommenden Bereich einfach ein Rechteck zeichnen.

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}

\pgfplotsset{compat=1.9}

\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
      date coordinates in=x,
      xmin=2012-01-01,
      xticklabel=\day.\month,
      ymin=-1,
      ymax=1
    ]
      \addplot [red] coordinates {
        (2012-01-01,-1)
        (2012-02-17,-0.7)
        (2012-02-27,-0.2)
        (2012-03-17,0)
        (2012-03-19,-0.3)
        (2012-04-7,0.4)
        (2012-04-20,0.3)
      };
    \fill[gray,fill opacity=0.25] (axis cs:2012-02-12,-1) rectangle (axis cs:2012-03-17,1);
    \end{axis}
  \end{tikzpicture}
\end{document}

Aus mir unbekannten Gründen mussten die obere und untere Grenze auf der Ordinate explizit gesetzt werden.


alt text

Permanenter link

beantwortet 01 Nov '13, 12:54

Thorsten's gravatar image

Thorsten
1.6k325
Akzeptiert-Rate: 58%

Hi Thorsten,

vielen dank für deine Antwort. Hat mir sehr weitergeholfen.

(02 Dez '13, 07:51) josephine

Update

Ab Version 1.10 von pgfplots kann man dafür einfach die pgfplotslibrary fillbetween nutzen:

Open in writeLaTeX
\documentclass[margin=5pt]{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepgfplotslibrary{
  dateplot,
  fillbetween
}

\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
      date coordinates in=x,
      xmin=2012-01-01,
      xticklabel=\day.\month,
    ]
    \addplot [red] coordinates {
      (2012-01-01,-1)(2012-02-17,-0.7)(2012-02-27,-0.2)(2012-03-17,0)
      (2012-03-19,-0.3)(2012-04-7,0.4)(2012-04-20,0.3)};
% Füllung:
    \path[name path=T](rel axis cs:0,1)--(rel axis cs:1,1); % obere Achse
    \path[name path=B](rel axis cs:0,0)--(rel axis cs:1,0); % untere Achse
    \addplot[blue, opacity=0.1]% Fülleigenschaften
      fill between [%
      of=T and B,% zwischen oberer und unterer Achse
      soft clip={domain=2012-02-12:2012-03-17}% Einschränkung des Zeitraumes
    ];
  \end{axis}
  \end{tikzpicture}
\end{document}

alt text


Ursprüngliche Antwort:

pgfplots stellt verschiedene Koordinatensysteme zur Verfügung. Wenn man neben dem axis cs noch das rel axis cs verwendet, dann müssen ymin und ymax nicht vorgegeben werden. Im rel axis cs entspricht eine Einheit der Länge der entsprechenden Koordinatenachse, d.h. (rel axis cs:0,0) bezeichnet die Diagrammecke links unten und (rel axis cs:1,1) die Diagrammecke rechts oben.

Open in writeLaTeX
\documentclass[margin=5pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.9}

\newcommand\abschnittfaerben[3][]{%
  \fill[#1]
    ({rel axis cs:0,0}-|{axis cs:#2,0})
    rectangle
    ({rel axis cs:0,1}-|{axis cs:#3,0});
}

\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
      date coordinates in=x,
      xmin=2012-01-01,
      xticklabel=\day.\month,
    ]
%
    \abschnittfaerben[blue,fill opacity=0.1]{2012-02-12}{2012-03-17}
%
    \addplot [red] coordinates {
      (2012-01-01,-1)(2012-02-17,-0.7)(2012-02-27,-0.2)(2012-03-17,0)
      (2012-03-19,-0.3)(2012-04-7,0.4)(2012-04-20,0.3)};
  \end{axis}
  \end{tikzpicture}
\end{document}
Permanenter link

beantwortet 01 Nov '13, 21:57

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 07 Mär '14, 21:31

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×296
×53
×27
×3

gestellte Frage: 01 Nov '13, 11:42

Frage wurde gesehen: 16,395 Mal

zuletzt geändert: 07 Mär '14, 21:31