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 только один раз. Я попробовал самый простой способ добиться этого, но он не работает:

\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

Pgf/Tikz имеет свои собственные if-then-elseконструкции, среди прочих математических операторов. Смотрите раздел95.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}

Связанный контент