TikZ 中 filldraw 的相对定位

TikZ 中 filldraw 的相对定位

我正在尝试水平对齐三个带标签的圆圈。使用绝对位置是可行的,尽管我希望圆圈和其标签之间有一个边距。但是我认为能够将它们相对于彼此定位会更好,因为标签长度是可变的。

我目前正在使用 tikz 的定位库,但显然它无法根据命令进行定位filldraw,或者我只是使用不正确。它只是将圆圈放在彼此的顶部。我真的没有太多使用 tikz 的经验,所以任何帮助都非常感谢!

梅威瑟:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}

% absolute
\begin{tikzpicture}[scale=0.50]
        \filldraw[fill=white!40!red,thin] (0,0) circle (12pt) 
        node[anchor=west] {= executing};
        \filldraw[fill=white!40!yellow,thin] (8,0) circle (12pt)
        node [anchor=west]{=ready};
        \filldraw[fill=white!40!green,thin] (14,0) circle (12pt)
        node[anchor=west]{=stalling};
\end{tikzpicture}

% relative
\begin{tikzpicture}[scale=0.50]
        \filldraw[fill=white!40!red,thin] (0,0) circle (12pt);
        \node[right = 6pt] {= executing};
        \filldraw[fill=white!40!yellow,thin, right = 24pt] circle (12pt);
        \node [right = 6pt]{=ready};
        \filldraw[fill=white!40!green,thin, right = 24pt] circle (12pt);
        \node[right = 6pt]{=stalling};
\end{tikzpicture}

\end{document}

答案1

您走在正确的道路上 (+1)!我建议您对解决方案进行以下更改:

  • 为所有圆圈定义通用样式,并提供填充颜色选项
  • 为圆圈写文字(解释)作为标签
  • 给标签命名
  • 根据标签定位节点
\documentclass[border=3.141592mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
    \begin{tikzpicture}[
  node distance = 1em,
dot/.style args = {#1/#2}{circle, fill=#1!70, minimum size=12pt,
                          label={[name=@dot]right:{= #2}}, node contents={}}
                        ]
\node   [dot=red/executing];
\node   [dot=yellow/ready, right=of @dot];
\node   [dot=green/stalling, right=of @dot];
    \end{tikzpicture}
\end{document}

在此处输入图片描述

或者图片样式略有变化:

    \begin{tikzpicture}[
  node distance = 1em,
dot/.style args = {#1/#2}{circle, fill=#1!70, minimum size=12pt, 
                          label={[name=@dot]right:{: #2}}, node contents={}},
every label/.append style = {inner xsep=1pt}
                    ]

在此处输入图片描述

答案2

好的,所以我发现也可以使用\node命令并提供circle参数来绘制圆圈。这样做可以达到预期的效果。如果有更好或更简洁的解决方案,请告诉我。

\begin{tikzpicture}
        \node[circle,fill=white!40!red,thin,minimum size=12pt] (circ1) (0,0) {}; 
        \node[right = 4pt] (txt1) {= executing};
        \node[circle,fill=white!40!yellow,thin,minimum size=12pt,right = 4pt of txt1] (circ2) {}; 
        \node[right = 4pt of circ2] (txt2) {= ready};
        \node[circle,fill=white!40!green,thin,minimum size=12pt,right = 4pt of txt2] (circ3) {}; 
        \node[right = 4pt of circ3] {= stalling};
\end{tikzpicture}

相关内容