创建 xy 图和围绕具有特定半径的点的圆

创建 xy 图和围绕具有特定半径的点的圆

基本上,我想演示一种使用圆圈表示其 k-最近邻的算法(LOF)。

我已经创建了一个 Python 脚本来为我创建图形,有人建议我改用 LaTeX。

这是我想要创建的图形:(圆的半径为 2,原点为 (0,0)) 在此处输入图片描述

这是我目前想到的:

\documentclass[11pt]{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    
    % help lines
    \draw[step=1,help lines,black!20] (-0.05,-0.05) grid (5.95,5.95);
    % axis
    \draw[thick,->] (0,0) -- (6,0);
    \draw[thick,->] (0,0) -- (0,6);
    
    % points
    \foreach \Point/\PointLabel in {(0,0)/X_j, (0,2)/D, (2,-2)/X_i, (1,1)/X_i, (2,0)/B}
    \draw[fill=black] \Point circle (0.05) node[above right] {$\PointLabel$};
    
\end{tikzpicture}
\end{document}

这是我目前想到的:

在此处输入图片描述

图片的中心应位于 (0,0) 处,并且 xy 轴上的所有数字均缺失。有什么方法可以使原点移动?因此,当我使用 (0,0) 时,它位于中心。

我对 LaTeX 还很陌生,在自己尝试了一下之后,我想我可以在这里问一下。

谢谢你的帮助!

编辑:在这个完美的答案之后最终:

在此处输入图片描述

答案1

您可以使用scope来应用移位。因此,

\begin{scope}[shift={(1,3)}]
    <code at (0,0)>
\end{scope}

将转移相对于 绘制的所有(0,0)代码(1,3)

可以使用简单的循环添加刻度线\foreach

\foreach \x in {0,...,6} {
    \node [below, font=\small] at (\x,0) {\x};
    \node [left,  font=\small] at (0,\x) {\x};
}

在此处输入图片描述

笔记:

  • 对于更复杂的图表,您应该使用pgfplots。但由于您才刚刚开始,这应该可以让您现在就开始。

代码:

\documentclass[11pt]{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    
    % help lines
    \draw[step=1,help lines,black!20] (0,0) grid (6,6);
    
    % tick marks
    \foreach \x in {0,...,6} {
        \node [below, font=\small] at (\x,0) {\x};
        \node [left,  font=\small] at (0,\x) {\x};
    }
    
    % axis
    \draw[thick,->] (0,0) -- (6.2,0);
    \draw[thick,->] (0,0) -- (0,6.2);
    
    \begin{scope}[shift={(1,3)}]
        \draw [orange, ultra thick, radius=2] circle;
        % points
        \foreach \Point/\PointLabel in {(0,0)/X_j, (0,2)/D, (2,-2)/X_i, (1,1)/X_i, (2,0)/B}
        \draw[fill=black] \Point circle (0.05) node[above right] {$\PointLabel$};
    \end{scope}
    
\end{tikzpicture}
\end{document}

答案2

TikZ如果你想将坐标标签向右移动,你需要

\documentclass[margin=.5cm]{standalone} 
\usepackage{tkz-base,tkz-euclide}
% \usetikzlibrary{math}
\begin{document} 
\begin{tikzpicture}
  \tkzInit[xmin=0,xmax=6,ymin=0,ymax=6]
  \tkzGrid[very thin,teal]
   \tkzDrawXY
  \begin{scope}[shift={(3,3)}]
    \tkzDefPoint(0,0){A}
    \tkzDefPoint(2,0){B}
    \tkzDefPoint(0,2){D}
    \tkzDefPoint(1,1){C}
     \tkzDefPoint(2,-2){E}
    \tkzDrawCircle[orange,line width=2pt](A,B)
    \tkzDrawPoints[size=4](A,...,E)
    \tkzLabelPoints(B,D)
    \tkzLabelPoint(A){$X_j$}
    \tkzLabelPoint(C){$X_i$}
    \tkzLabelPoint(E){$X_i$}
  \end{scope}

 \foreach \i in {-3,...,3} {
        \node [below, font=\small] at (\i+3,0) {\i};
        \node [left,  font=\small] at (0,\i+3) {\i};}
    
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容