基本上,我想演示一种使用圆圈表示其 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}