Ich generiere einen Polar-Diagramm von Chebyshev-Polynomen. Jedem Plot gebe ich einen Namen. Anschließend fülle ich in einer Schleife Zwischenräume von erzeugten Plots. Jedoch kann man sich nicht auf die Namen beziehen. In folgenden Beispiel kommt ein Fehler:

Open in writeLaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{polar,fillbetween}
\begin{document}
\begin{tikzpicture}
  \begin{polaraxis}[hide axis]
    \pgfplotsinvokeforeach{0,...,20}{
      \addplot[name path = #1, mark=none, solid, domain=0:360, samples=100] 
        { #1*2 + cos(#1*2*acos(x/180-1))}; }
    \addplot[name path = -1] coordinates {(0,0)};% start for filling
    \foreach \i [evaluate=\i as \j using int(\i-1)] in {0,2,...,20}{
      \addplot[black] fill between[of=\i and \j];
    }
    \end{polaraxis}
\end{tikzpicture}
\end{document}

Der Fehler lautet:

Open in writeLaTeX
Runaway argument?
\i and \j \pgf@stop \else \pgfkeys@case@two \fi \fi \fi \pgfkeys@parse \ETC.
! File ended while scanning use of \tikzlibraryfillbetween@parse.
<inserted text> 
                \par

Wie schafft man es dennoch in einer Schleife?

Anlass für die Frage war, dass ich mich dafür interessierte, den Plot von M. Trott aus dem Buch "Graphica 1" zu programmieren, den man auf Wolfram MathWorld findet.

gefragt 18 Jul '14, 18:52

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 50%

bearbeitet 18 Jul '14, 19:04

Die Frage ist zum Archivieren gedacht, kein Support benötigt. Ich werde meine Lösung hierzu posten fürs Archiv.

(18 Jul '14, 18:52) stefan ♦♦

Statt \foreach kann man \pgfplotsinvokeforeach verwenden, um die Expansion der Schleifenvariablen zu erzwingen, damit \addplot damit klarkommt. Das habe ich schon in der ersten Schleife getan.

Jedoch haben wir zwei Optionen anzugeben, da zwischen zwei Plots gefüllt wird, also zwischen zwei benannten Pfaden. Dabei lässt sich der eine natürlich aus dem anderen ermitteln, da zwischen benachbarten Plots gefüllt wird. Also nehme ich \foreach in Kombination mit Berechnung des anderen Namens. Mit \edef erreiche ich das Expandieren der Optionen in ein Makro was ich \addplot übergebe. Mittels \expandafter wird das Erzeugen der Optionen vor dem eigentlichen Aufruf von \addplot erzwungen.

Ein kleines Detail ist noch, dass hier ein Leerzeichen nach einer Makro-Expansion verschluckt wird, das ich daher mit \space explizit einfüge.

Open in writeLaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{polar,fillbetween}
\begin{document}
\begin{tikzpicture}
  \begin{polaraxis}[hide axis]
    \pgfplotsinvokeforeach{0,...,20}{
      \addplot[name path = #1, mark=none, solid, domain=0:360, samples=100] 
        { #1*2 + cos(#1*2*acos(x/180-1))}; }
    \addplot[name path = -1] coordinates {(0,0)};% start for filling
    \foreach \i [evaluate=\i as \j using int(\i-1)] in {0,2,...,20} {
        \edef\temp{[black] fill between[of=\i\space and \j]}
        \expandafter\addplot\temp;
    }
    \end{polaraxis}
\end{tikzpicture}
\end{document}

Chebyshev-Spirale

Permanenter link

beantwortet 18 Jul '14, 19:00

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 50%

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:

×298
×117
×21
×21
×5

gestellte Frage: 18 Jul '14, 18:52

Frage wurde gesehen: 11,839 Mal

zuletzt geändert: 18 Jul '14, 19:04