Seite 1 von 1

Legende einer schraffierten Fläche

Verfasst: Fr 13. Sep 2013, 12:47
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

Verfasst: Fr 13. Sep 2013, 17:16
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

Verfasst: Fr 13. Sep 2013, 17:30
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!

Verfasst: Fr 13. Sep 2013, 17:38
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