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, 06:42

josephine's gravatar image

josephine
94432434
Akzeptiert: 76%

bearbeitet 01 Nov '13, 07:56

Thorsten's gravatar image

Thorsten
1.5k325


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, 07:54

Thorsten's gravatar image

Thorsten
1.5k325

Hi Thorsten,

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

(02 Dez '13, 01: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, 16:57

esdd's gravatar image

esdd
14.2k53251

bearbeitet 07 Mär '14, 15:31

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:

×160
×29
×21
×2

Frage gestellt: 01 Nov '13, 06:42

Frage wurde angeschaut: 4,808 Mal

Zuletzt aktualisiert: 07 Mär '14, 15:31