Legende einer schraffierten Fläche

Tabellen und Grafiken erstellen und anordnen


Linuil
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 12. Sep 2013, 11:17

Legende einer schraffierten Fläche

Beitrag von Linuil »

Hallo,
ich habe mir (etwas umständlich denke ich) folgenden Plot definiert.
Jetzt gefällt mir der Plot soweit, ich würde nur gerne die Legende außerhalb des Plotes haben, die die gelbe, schraffierte Fläche als Stabilitätsgebiet ausweist.
Wie mache ich das?

Genauer: Ich hätte in der Legende gerne ein kleines gelb ausgefülltes und schwarz schraffiertes Quadrat und daneben das Wort Stabilitätsgebiet.

(Anmerkung: Wenn man den Plot irgendwie einfacher erstellen kann, bin ich für Tipps dankbar. Das Pattern für Streifen gefällt mir nicht, da die Streifen dort zu klein und hauptsächlich zu eng sind)
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\usepackage{pgfplots}

\begin{document}
%
\begin{tikzpicture}
%
\begin{axis}[axis on top = true,
width= 6cm, height =6cm, xmin = -3, xmax = 3, ymin=-3, ymax =3,
 xtick={-2,-1,0,1,2}, ytick={-1,0,1},xlabel={Re(z)}, ylabel = {Im(z)}]
\begin{scope}% wichtig damit die Wirkung von clip begrenzt wird
% Schneiden und Füllen der eigentlichen Form
  \clip[postaction={fill=yellow,fill opacity=0.4}](axis cs:-3,-3) -- (axis cs:-3,3) -- (axis cs:3,3) -- (axis cs:3,-3) -- (axis cs:-3,-3);
% Zeichnen der Streifen
\foreach \x in {-9,-8.5,...,3}{
	\edef\temp{ \noexpand
	\addplot[black!60, samples =4, domain=\x:\x+6]{x-3-\x};}
    \temp
}
\end{scope}
\addplot[yellow!40, fill=white, thick, samples=100, domain=0:2*pi]({1+sin(deg(x))} , {cos(deg(x))});
\draw[black!80](axis cs: -3,0) -- (axis cs: 3,0);
\draw[black!80](axis cs: 0,-3) -- (axis cs: 0,3);
\foreach \x in {-2,-1,...,2}
{
	\edef \temp{ \noexpand
	\addplot[black!80, samples=2,domain=-0.1:0.1]{\x}; }
	\temp
}
\foreach \x in {-2,-1,...,2}
{
	\edef \temp{ \noexpand
	\draw[black!80](axis cs: \x,-0.1) -- (axis cs: \x, 0.1); }
	\temp
}
\end{axis}
\end{tikzpicture}
%
\end{document}

Vielen Dank für eure Hilfe!
Linuil

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

Beitrag von esdd »

Hier ist mal ein Vorschlag:
\documentclass[border=5mm]{standalone}

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

\begin{document}

\begin{tikzpicture}[
  stabilitaet/.style={fill=yellow,fill opacity=0.4},
  linien/.style={black!60}]
%
\begin{axis}[width= 6cm, height =6cm,
  xmin = -3, xmax = 3, ymin=-3, ymax =3, 
  xtick={-2,-1,0,1,2}, ytick={-1,0,1},xlabel={Re(z)}, ylabel = {Im(z)},
  area legend,legend style={legend pos={outer north east}}] 
%
  \begin{scope}
    \clip[postaction={stabilitaet}](rel axis cs: 0,0)rectangle(rel axis cs: 1,1);
    \foreach \x in {-9,-8.5,...,6}{
      \edef\temp{\noexpand\draw[linien](axis cs:\x,-3)--++(axis direction cs: 6,6);}
      \temp}
  \end{scope}
%
  \addplot[draw=none,
    legend image code/.code={%
      \draw[stabilitaet] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
      \draw[linien](0cm,-0.1cm)--(0.2cm,0.1cm)(0.4cm,-0.1cm)--(0.6cm,0.1cm);}]
    coordinates {(0,0)};
  \addlegendentry{Stabilitaetsgebiet}
%
  \addplot[yellow!40, fill=white, thick, samples=100, domain=0:2*pi]
    ({1+sin(deg(x))} , {cos(deg(x))}); 
%
  \draw[black!80]
    (axis cs: -3,0) -- (axis cs: 3,0)
    (axis cs: 0,-3) -- (axis cs: 0,3);
%
  \foreach \x in {-2,-1,...,2}{
    \edef\temp{\noexpand\draw[black!80]
      (axis cs:\x,-0.1)--(axis cs: \x,0.1)
      (axis cs:-0.1,\x)--(axis cs: 0.1,\x);} 
    \temp}

\end{axis}
%
\end{tikzpicture}

\end{document}
Gruß
Elke

Linuil
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 12. Sep 2013, 11:17

Beitrag von Linuil »

Das ist ja cool!!
Vielen Dank, so sollte es aussehen!
Dieser Befehl "legend image code" ist ja genial.

Ich hab allerdings bei mir \pgfplotsset{compat=1.8} auskommentiert, weil bei mir die Fehlermeldung "Choice 1.8 unknown" auftrat. Bei mir lief ohne das auch durch, was macht das?


Vielen Dank!

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

Beitrag von esdd »

Das gibt an welche Version von pgfplots verwendet werden soll. Du hast vermutlich eine ältere, wenn er die 1.8 noch nicht kennt.

Gruß
Elke

Antworten