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, 12:52

stefan's gravatar image

stefan ♦♦
5.8k12234
Akzeptiert: 28%

bearbeitet 18 Jul '14, 13:04

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

(18 Jul '14, 12: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, 13:00

stefan's gravatar image

stefan ♦♦
5.8k12234

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
×108
×15
×9
×3

Frage gestellt: 18 Jul '14, 12:52

Frage wurde angeschaut: 2,585 Mal

Zuletzt aktualisiert: 18 Jul '14, 13:04