TikZ – Knotenstil abhängig vom Knotenwert

TikZ – Knotenstil abhängig vom Knotenwert

In einem Tikzpicture möchte ich Knoten je nach ihren Werten unterschiedliche Stile zuweisen. In einer Liste mit Ganzzahlen möchte ich beispielsweise den Knoten rot oder blau einfärben.

Dies ist nur ein Test für ein größeres Projekt, aber eine Antwort darauf sollte trotzdem hilfreich sein.

Der folgende Code funktioniert:

\documentclass{article}
\usepackage{tikz}
\usepackage{pgffor}
\usepackage{ifthen}

\begin{document}

\begin{tikzpicture}
    \pgfmathdeclarerandomlist{nums}{{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}}
    \foreach \x in {1,...,10}
        {
        \pgfmathrandomitem{\choice}{nums}
        \ifthenelse{\choice<5}
            {
            \node[circle, fill=blue!50] at (\x,0) {\choice};
            }
            {
            \node[circle,fill=red!50] at (\x,0) {\choice};
            }
        }
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

Was ich aber gerne tun würde, ist, einen Knotenstil zu erstellen, der vom Wert des Knotens abhängt. Auf diese Weise könnte ich weitere Fälle hinzufügen und die Zeile \node nur einmal verwenden. Ich habe versucht, dies auf die einfachste Weise zu erreichen, aber es funktioniert nicht:

\begin{tikzpicture}
    \pgfmathdeclarerandomlist{nums}{{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}}
    \foreach \x in {1,...,10}
        {
        \pgfmathrandomitem{\choice}{nums}
        \def\clr{\ifthenelse{\choice<5}{blue!50}{red!50}}
        \node[circle, fill=\clr] at (\x,0) {\choice};
        }
\end{tikzpicture}

Kurz gesagt, ich hätte gern eine Reihe von ifthenelse in einem TikZ-Stil. Das hat auch nicht funktioniert. Scheint, als ob \ifthenelse nicht mit jeder TikZ-Struktur übereinstimmt ...

Vielen Dank im Voraus, wenn Sie wissen, wie Sie mir hierbei helfen können.

Antwort1

Pgf/Tikz hat seine eigenen if-then-elseKonstrukte, neben anderen mathematischen Operatoren. Siehe Abschnitt95.2 Syntax für mathematische Ausdrücke: Operatoren des Handbuchs.

Was Sie in Ihrem zweiten Snippet vorgeschlagen haben, kann tatsächlich mit dem folgenden Skript erreicht werden.

\documentclass{article}
\usepackage{tikz}
\usepackage{pgffor}
\usepackage{ifthen}

\tikzset{
    conditionalcolor/.style={circle,fill=#1}
}

\begin{document}

\begin{tikzpicture}
    \pgfmathdeclarerandomlist{nums}{{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}}
    \foreach \x in {1,...,10}{
            \pgfmathrandomitem{\choice}{nums}
            \pgfmathsetmacro{\col}{ifthenelse(\choice<5,"blue!50","red!50")}
            \node[conditionalcolor=\col] at (\x,0) {\choice};
        }
\end{tikzpicture}

\end{document}

BEARBEITENHier ist ein Code, bei dem die Zufallszahl in einem Intervall von ganzen Zahlen generiert wird.

\documentclass{article}
\usepackage{tikz}

\tikzset{
    conditionalcolor/.style={circle,fill=#1}
}

\begin{document}
\begin{tikzpicture}
    \foreach \x in {1,...,10}{
            \pgfmathtruncatemacro{\choice}{random(0,9)}
            \pgfmathsetmacro{\col}{ifthenelse(\choice<5,"blue!50","red!50")}
            \node[conditionalcolor=\col] at (\x,0) {\choice};
        }
\end{tikzpicture}

\end{document}

verwandte Informationen