使用 TikZ 制作图形的最佳方法

使用 TikZ 制作图形的最佳方法

我想听听您对以下示例的意见。我只是想展示几个要点,在它们之间建立联系,并相应地标记/着色它们。

使用 TSX,我想出了以下内容,但不确定从长远来看这是否是最好的方法。我喜欢基于 tupel 的输入,但想使用名称来简单地在它们之间划一条线。示例可以升级以包含类似这样的内容吗?

在此处输入图片描述

\documentclass[12pt,english]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz,pgfplots}
\setbeamertemplate{navigation symbols}{}

\begin{document}
\begin{frame}[plain]
\hspace*{-1.5em}\begin{tikzpicture}
\begin{axis}[
    domain=0:10,
    axis lines = center,
    height=10cm, width=12cm, grid=major,grid style={dashed, gray!30},
    xmin=0, xmax=12, ymin=0, ymax=9,xtick={1,2,...,11},ytick={1,2,...,10}]
    \addplot+[red,only marks,mark=*,mark options={scale=2, fill=red},text mark as node=true] coordinates {
    (1,2)
    (3,1)
    (4,3)
    (5,2)
    (2,3)    
    };
    \addplot+[red,only marks,mark=*,mark options={scale=2, fill=red},text mark as node=true] coordinates {
    (7,7)
    (8,8)
    (9,5)
    (11,6)
    (10,8)
    };

\draw (axis cs:0,0) -- (axis cs:2,2);
\filldraw (axis cs:5,5) circle (3pt);
\node[anchor=north] at (axis cs:7,6.9) {1};
\node[anchor=south] at (axis cs:5,1) {$f(\theta_A, x)$};
\end{axis}

\end{tikzpicture}
\end{frame}
\end{document}

答案1

好吧,如果您只想命名圆圈以便对其进行操作,则需要使用节点,因为简单形状没有别名。在我看来,实现此目的的简单解决方案是切换到常规 Tikz。使用\foreach,您可以创建许多节点并使用计数器为每个节点分配名称,在我们的例子中将类似于n\n,从而产生命名的节点n1, n2, n3等等。

输出

在此处输入图片描述

代码

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\newcommand\labelit[3][below]{%
    \node[label={#1:#3}] at (#2) {};
}

\def\maxc{11}

\begin{document}
\begin{tikzpicture}
\draw[-Stealth, shorten >=-1cm] (0,0) -- (\maxc,0);
\draw[-Stealth, shorten >=-1cm] (0,0) -- (0,\maxc-2);
\foreach \x [count=\y] in {1,...,\maxc}{
    \draw (\x,.1) -- (\x,-.1) node[below] {\x};
    \ifnum\x<10\relax
    \draw (.1,\y) -- (-.1,\y) node[left] {\y};
    \draw[dashed, gray!30] (0,\y) -- (\maxc+1,\y);
    \fi
    \draw[dashed, gray!30] (\x,0) -- (\x,\maxc-1);
}

\foreach \point [count=\n] in {%
    (1,2),  (3,1), 
    (4,3),  (5,2), 
    (2,3),  (7,7),
    (8,8),  (9,5),
    (11,6), (10,8)
}{%
    \node[circle, fill=red, inner sep=3pt] (n\n) at \point {};
}

% label points, arguments are: [position]{node}{label}
\labelit{n4}{$f(\theta_A, x)$}

% and now random links!
\draw (n5) -- (n3) -- (n1) -- (n4) -- (n2);
\end{tikzpicture}
\end{document}

相关内容