![TiKz 包:如何在函数域范围图中用数字替换点](https://linux22.com/image/455983/TiKz%20%E5%8C%85%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%E5%87%BD%E6%95%B0%E5%9F%9F%E8%8C%83%E5%9B%B4%E5%9B%BE%E4%B8%AD%E7%94%A8%E6%95%B0%E5%AD%97%E6%9B%BF%E6%8D%A2%E7%82%B9.png)
我试图弄清楚如何用数值(1、2、3 等)替换圆圈中的点
请帮我确定需要编辑哪些代码行来完成这个替换。
提前致谢!
mwe (h/t pecusse)
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,fit}
\begin{document}
\begin{tikzpicture}
%put some nodes on the left
\foreach \x in {1,2,3}{
\node[fill,circle,inner sep=2pt] (d\x) at (0,\x) {};
}
\node[fit=(d1) (d2) (d3),ellipse,draw,minimum width=1cm] {};
%put some nodes on the center
\foreach \x[count=\xi] in {0.5,1.5,...,4}{
\node[fill,circle,inner sep=2pt] (r\xi) at (2,\x) {};
}
\node[fit=(r1) (r2) (r3) (r4),ellipse,draw,minimum width=1.5cm] {};
%put some nodes on the right
\foreach \x[count=\xi] in {0.75,1.5,...,3}{
\node[fill,circle,inner sep=2pt] (c\xi) at (4,\x) {};
}
\node[fit=(c1) (c2) (c3) (c4) ,ellipse,draw,minimum width=1.5cm] {};
\draw[-latex] (d1) -- (r2);
\draw[-latex] (d2) -- (r2);
\draw[-latex] (d3) -- (r4);
\draw[-latex] (r1) -- (c2);
\draw[-latex] (r2) -- (c3);
\draw[-latex] (d3) -- (r4);
\end{tikzpicture}
\end{document}
答案1
我不知道您想将哪些数字放在哪里,但一般来说,节点的内容应该放在花括号之间:\node[options] (name) at (0,0) {
... };
。
\foreach
在您的示例中,您可能希望将存储在宏中的循环中的数字放入节点中\x
。由于节点填充为黑色,因此里面的文本不可见。因此,我建议您使用例如更改填充颜色。fill=lightgray
因此,您可以编写类似以下内容的内容:\node[fill=lightgray,circle,inner sep=2pt] (d\x) at (0,\x) {\x};
。
如果对所有三组节点执行此操作,您会发现节点内容的长度不同,因此圆圈的大小也会不同。例如,有些节点只包含一位数字,而其他节点则包含三位数字和一个点作为小数分隔符。您可能希望minimum width=2.5em
向节点添加选项(或类似选项),以使所有节点的大小相同。
最后,由于节点可能会因尺寸增加而重叠,因此您可以设置y=1.25cm
整体选项tikzpicture
,增加垂直距离,同时保持水平距离不变。
综合考虑所有因素,您将获得:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,fit}
\begin{document}
\begin{tikzpicture}[y=1.25cm]
%put some nodes on the left
\foreach \x in {1,2,3}{
\node[fill=lightgray,circle,inner sep=2pt,minimum width=2.5em] (d\x) at (0,\x) {\x};
}
\node[fit=(d1) (d2) (d3),ellipse,draw,minimum width=1cm] {};
%put some nodes on the center
\foreach \x[count=\xi] in {0.5,1.5,...,3.5}{
\node[fill=lightgray,circle,inner sep=2pt,minimum width=2.5em] (r\xi) at (2,\x) {\x};
}
\node[fit=(r1) (r2) (r3) (r4),ellipse,draw,minimum width=1.5cm] {};
%put some nodes on the right
\foreach \x[count=\xi] in {0.75,1.5,...,3}{
\node[fill=lightgray,circle,inner sep=2pt,minimum width=2.5em] (c\xi) at (4,\x) {\x};
}
\node[fit=(c1) (c2) (c3) (c4),ellipse,draw,minimum width=1.5cm] {};
\draw[-latex] (d1) -- (r2);
\draw[-latex] (d2) -- (r2);
\draw[-latex] (d3) -- (r4);
\draw[-latex] (r1) -- (c2);
\draw[-latex] (r2) -- (c3);
\draw[-latex] (d3) -- (r4);
\end{tikzpicture}
\end{document}
如果您不想在数字后面添加任何背景,您可以完全删除节点的选项(另外,您不需要设置y=1.25cm
)。您可能想要添加一些颜色(类似于您在评论中提供的图片),因此我为左侧椭圆和其中一个箭头添加了一些颜色:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,fit}
\begin{document}
\begin{tikzpicture}
%put some nodes on the left
\foreach \x in {1,2,3}{
\node (d\x) at (0,\x) {\x};
}
\node[fit=(d1) (d2) (d3),ellipse,draw=blue,minimum width=1cm] {};
%put some nodes on the center
\foreach \x[count=\xi] in {0.5,1.5,...,3.5}{
\node (r\xi) at (2,\x) {\x};
}
\node[fit=(r1) (r2) (r3) (r4),ellipse,draw,minimum width=1.5cm] {};
%put some nodes on the right
\foreach \x[count=\xi] in {0.75,1.5,...,3}{
\node (c\xi) at (4,\x) {\x};
}
\node[fit=(c1) (c2) (c3) (c4),ellipse,draw,minimum width=1.5cm] {};
\draw[-latex,orange] (d1) -- (r2);
\draw[-latex] (d2) -- (r2);
\draw[-latex] (d3) -- (r4);
\draw[-latex] (r1) -- (c2);
\draw[-latex] (r2) -- (c3);
\draw[-latex] (d3) -- (r4);
\end{tikzpicture}
\end{document}