TikZ - ノード値に応じたノードスタイル

TikZ - ノード値に応じたノードスタイル

tikzpicture では、ノードの値に応じて異なるスタイルを適用したいと思います。たとえば、整数のリストでは、ノードを赤または青で色付けしたいと思います。

これはより大きなプロジェクトのためのテストに過ぎませんが、この答えはいずれにしても役立つはずです。

次のコードは動作します:

\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}

ここに画像の説明を入力してください

しかし、私がやりたいのは、ノードの値に応じてノード スタイルを作成することです。この方法では、ケースをさらに追加し、\node 行を 1 回だけ使用できます。これを実現する最も簡単な方法を試しましたが、うまくいきませんでした。

\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}

結局、私が欲しいのは、一連の ifthenelse を tikzstyle に組み込むことです。これも機能しませんでした。\ifthenelse はすべての TikZ 構造に準拠していないようです...

これに関して私を助けてくれる方法をご存知でしたら、よろしくお願いします。

答え1

if-then-elsePgf/Tikzには、他の数学演算子に加えて独自の構造があります。セクションを参照してください。95.2 数式の構文: 演算子 マニュアルの。

2 番目のスニペットで提案したことは、実際には次のスクリプトで実現できます。

\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}

編集以下は、整数の範囲内で乱数が生成されるコードです。

\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}

関連情報