
Я пытаюсь понять, как заменить точки в кругах числовыми значениями (1, 2, 3 и т. д.)
Пожалуйста, помогите мне определить, какие строки кода мне необходимо отредактировать, чтобы выполнить эту замену.
Заранее спасибо!
mwe (ч/т пекусс)
\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}