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}

相关内容