Hobbykomiker
15-10-2013, 20:03
Huhu,
eigentlich habe ich mein Problem schon annähernd gelöst, aber vielleicht habe ich einen Denkfehler bei meiner ursprünglichen Herangehensweise gehabt und Ihr könnt mir sagen, wo er war. Ich weiß aus Jahr(zehnt)e langer LaTeX-Erfahrung, dass Fehler relativ häufig irgendwo zwischen meinen Ohren zu finden sind. :)
Bevor es losgeht, stelle ich erstmal meinen LaTeX-Rumpf hier ein, den ich für alles weitere verwendet habe:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
<<< Code-Fragmente >>>
\end{tikzpicture}
\end{document}
Alle nachfolgenden Code-Schnipsel sind an der Stelle
<<< Code-Fragmente >>>
einzusetzen, um die Effekte, die ich hatte, (hoffentlich) nachzuvollziehen.
Bevor es zu meinem eigentlich Anliegen kommt, ein kleiner Effekt, den ich gerade hatte:
In den Beispielen des pgfplots-Manuals finde ich häufiger foreach-Schleifen der
Form (ist hier aber ein eigenes Beispiel)
\begin{axis} [domain=0:2,ymin=0,xmax=2]
\foreach \y in {0.3,0.6} { \addplot {\y*x} ; }
\end{axis}
Das liefert bei mir jedoch Unsinn, erst wenn ich die Laufvariable ändere
\y -> \ye funktioniert es. also:
\begin{axis} [domain=0:2,ymin=0,xmax=2]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Ich gehe natürlich davon aus, dass die Beispiele im Manual getestet worden sind, aber woran könnte es dann liegen?
Gut, kommen wir nun zu meinem eigentlichen "Problem".
Ich wollte eigentlich meinen Kurven in der foreach-Schleifen Farben zuordnen, etwa in der Art, wie es im pgfmanual (Kap. 56) mit "ball color" gezeigt wird:
\begin{axis} [domain=0:2,ymin=0,xmax=2]
\foreach \ye/\farbe in {0.3/red,0.6/blue} {
\addplot [color=\farbe] {\ye*x} ;
}
\end{axis}
Bei mir gibt es dann immer den Fehler
Undefined control sequence \end{axis}
Ich habe die unterschiedlichsten Varianten ausprobiert, aber nix hat funktioniert.
Komischerweise funktioniert dieses Minimalbeispiel, wenn man die foreach-Schleife um die axis-Umgebung packt (und natürlich ymax festsetzt):
\foreach \ye/\farbe in {0.3/red,0.6/blue} {
\begin{axis} [domain=0:2,ymin=0,ymax=1,xmax=2]
\addplot[\farbe] {\ye*x} ;
\end{axis} } ; %
An der einen oder anderen Stelle ließe sich das zwar so verwenden, aber irgendwie erscheint mir das nicht sinnvoll, da insbesondere andere Schleifenvariablen innerhalb der axis-Umgebung (bisher) problemlos laufen.
Nach einigem Suchen bin ich dann im pgfplots-Manual auf die 'cycle list', 'cycle list name', '\pgfplotscreateplotcyclelist' usw. gestoßen, die meinen
"Workaround" darstellen (der kann aber leider nicht alles, was ich will).
Ich habe mir also zuerst eine eigene 'cycle list' erstellt
\pgfplotscreateplotcyclelist{zweiFarben} %
{
{red},
{blue}
}
\begin{axis} [domain=0:2,ymin=0,xmax=2,cycle list name=zweiFarben]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Ok, das sieht gut aus, da ich aber schnell übermütig werde, habe ich dann gleich ausprobiert auch die Liniendicke und -art in die 'cycle list' auszulagern:
Folgender Code funktioniert allerdings nicht:
\pgfplotscreateplotcyclelist{zweiFarben} %
{
{red,very thick},
{blue,very thick}
}
\begin{axis} [domain=0:2,ymin=0,xmax=2,cycle list name=zweiFarben]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Der nächste Code funktioniert aber wieder:
\pgfplotscreateplotcyclelist{zweiFarben} %
{
{red,very thick},
{blue,very thick},
{magenta}
}
\begin{axis} [domain=0:2,ymin=0,xmax=2,cycle list name=zweiFarben]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Ich denke, der letzte Punkt mit den 'cycle list's fällt eher unter den Punkt "nice to know", es sei denn ich bin (wie so oft) von der gedachten Anwendung abgewichen. Dann würde ich um Aufklärung bitten.
Mein größtes "Problem" im Moment ist jedoch, dass die Anzahl der aufgerufenen \addplots, die die gleiche Farbe bekommen sollen, in der foreach-Schleife von weiteren Parametern abhängig sein können und somit nicht notwendigerweise bei jedem Schleifendurchlauf gleich ist. Bisher war das zwar der Fall, aber man möchte ja in die ferne Zukunft planen können :) ;)
Vielleicht gibt es ja auch eine andere (viel einfachere) Lösung oder zumindest andere Ansätze. :confused:
Thorsten
P.S.: Auf TikZ bin ich erst vor rund zehn, auf pgfplots vor gut sieben Wochen gestoßen (worden), ich würde mich also nicht als erfahrenen Anwender betrachtet, aber ich übe fleißig!!!!! :D
eigentlich habe ich mein Problem schon annähernd gelöst, aber vielleicht habe ich einen Denkfehler bei meiner ursprünglichen Herangehensweise gehabt und Ihr könnt mir sagen, wo er war. Ich weiß aus Jahr(zehnt)e langer LaTeX-Erfahrung, dass Fehler relativ häufig irgendwo zwischen meinen Ohren zu finden sind. :)
Bevor es losgeht, stelle ich erstmal meinen LaTeX-Rumpf hier ein, den ich für alles weitere verwendet habe:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
<<< Code-Fragmente >>>
\end{tikzpicture}
\end{document}
Alle nachfolgenden Code-Schnipsel sind an der Stelle
<<< Code-Fragmente >>>
einzusetzen, um die Effekte, die ich hatte, (hoffentlich) nachzuvollziehen.
Bevor es zu meinem eigentlich Anliegen kommt, ein kleiner Effekt, den ich gerade hatte:
In den Beispielen des pgfplots-Manuals finde ich häufiger foreach-Schleifen der
Form (ist hier aber ein eigenes Beispiel)
\begin{axis} [domain=0:2,ymin=0,xmax=2]
\foreach \y in {0.3,0.6} { \addplot {\y*x} ; }
\end{axis}
Das liefert bei mir jedoch Unsinn, erst wenn ich die Laufvariable ändere
\y -> \ye funktioniert es. also:
\begin{axis} [domain=0:2,ymin=0,xmax=2]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Ich gehe natürlich davon aus, dass die Beispiele im Manual getestet worden sind, aber woran könnte es dann liegen?
Gut, kommen wir nun zu meinem eigentlichen "Problem".
Ich wollte eigentlich meinen Kurven in der foreach-Schleifen Farben zuordnen, etwa in der Art, wie es im pgfmanual (Kap. 56) mit "ball color" gezeigt wird:
\begin{axis} [domain=0:2,ymin=0,xmax=2]
\foreach \ye/\farbe in {0.3/red,0.6/blue} {
\addplot [color=\farbe] {\ye*x} ;
}
\end{axis}
Bei mir gibt es dann immer den Fehler
Undefined control sequence \end{axis}
Ich habe die unterschiedlichsten Varianten ausprobiert, aber nix hat funktioniert.
Komischerweise funktioniert dieses Minimalbeispiel, wenn man die foreach-Schleife um die axis-Umgebung packt (und natürlich ymax festsetzt):
\foreach \ye/\farbe in {0.3/red,0.6/blue} {
\begin{axis} [domain=0:2,ymin=0,ymax=1,xmax=2]
\addplot[\farbe] {\ye*x} ;
\end{axis} } ; %
An der einen oder anderen Stelle ließe sich das zwar so verwenden, aber irgendwie erscheint mir das nicht sinnvoll, da insbesondere andere Schleifenvariablen innerhalb der axis-Umgebung (bisher) problemlos laufen.
Nach einigem Suchen bin ich dann im pgfplots-Manual auf die 'cycle list', 'cycle list name', '\pgfplotscreateplotcyclelist' usw. gestoßen, die meinen
"Workaround" darstellen (der kann aber leider nicht alles, was ich will).
Ich habe mir also zuerst eine eigene 'cycle list' erstellt
\pgfplotscreateplotcyclelist{zweiFarben} %
{
{red},
{blue}
}
\begin{axis} [domain=0:2,ymin=0,xmax=2,cycle list name=zweiFarben]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Ok, das sieht gut aus, da ich aber schnell übermütig werde, habe ich dann gleich ausprobiert auch die Liniendicke und -art in die 'cycle list' auszulagern:
Folgender Code funktioniert allerdings nicht:
\pgfplotscreateplotcyclelist{zweiFarben} %
{
{red,very thick},
{blue,very thick}
}
\begin{axis} [domain=0:2,ymin=0,xmax=2,cycle list name=zweiFarben]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Der nächste Code funktioniert aber wieder:
\pgfplotscreateplotcyclelist{zweiFarben} %
{
{red,very thick},
{blue,very thick},
{magenta}
}
\begin{axis} [domain=0:2,ymin=0,xmax=2,cycle list name=zweiFarben]
\foreach \ye in {0.3,0.6} { \addplot {\ye*x} ; }
\end{axis}
Ich denke, der letzte Punkt mit den 'cycle list's fällt eher unter den Punkt "nice to know", es sei denn ich bin (wie so oft) von der gedachten Anwendung abgewichen. Dann würde ich um Aufklärung bitten.
Mein größtes "Problem" im Moment ist jedoch, dass die Anzahl der aufgerufenen \addplots, die die gleiche Farbe bekommen sollen, in der foreach-Schleife von weiteren Parametern abhängig sein können und somit nicht notwendigerweise bei jedem Schleifendurchlauf gleich ist. Bisher war das zwar der Fall, aber man möchte ja in die ferne Zukunft planen können :) ;)
Vielleicht gibt es ja auch eine andere (viel einfachere) Lösung oder zumindest andere Ansätze. :confused:
Thorsten
P.S.: Auf TikZ bin ich erst vor rund zehn, auf pgfplots vor gut sieben Wochen gestoßen (worden), ich würde mich also nicht als erfahrenen Anwender betrachtet, aber ich übe fleißig!!!!! :D