我有四个给定点,例如
A(3,2)
B(5,4)
C(-3, 4)
D(-3, 0)
使用 TikZ/PgfPlots,如何在笛卡尔坐标系中绘制它们,显示点,每个点都附有其名称(A,B,C,D),然后绘制四边形 ABCD 的边?
我是 TikZ 的新手:)
答案1
下面我列出了两个选项:第一个选项使用“纯”TikZ,第二个选项使用伟大的tkz-euclide
包裹。
一种可能性(代码有解释性注释):
\documentclass{article}
\usepackage{tikz}
\tikzset{
smalldot/.style={
circle,
fill,
inner sep=1.5pt
}
}
\begin{document}
\begin{tikzpicture}
% The x-axis
\draw[->]
(-3.5,0) -- (5.5,0);
% The y-axis
\draw[->]
(0,-0.5) -- (0,4.5);
% Ticks for x-axis
\foreach \Valor in {-3,...,5}
\draw (\Valor,2pt) -- (\Valor,-2pt) node[below] {\Valor};
% Ticks for y-axis
\foreach \Valor in {1,...,4}
\draw (-2pt,\Valor) node[left] {\Valor} -- (2pt,\Valor);
% define coordinates at the desired points
\path
coordinate (A) at (3,2)
coordinate (B) at (5,4)
coordinate (C) at (-3,4)
coordinate (D) at (-3,0);
% draw lines between the coordinates
\draw (A) -- (B) -- (C) -- (D) -- cycle;
% Label the points
\foreach \Nombre/\Pos in {A/right,B/right,C/left,D/left}
{
\node[\Pos] at (\Nombre) {$\Nombre$};
\node[smalldot] at (\Nombre) {};
}
\end{tikzpicture}
\end{document}
如果你刚开始使用 TikZ,我建议你使用tkz-euclide
基于 TikZ 构建的软件包,它具有一系列更直观的命令和一些预定义功能,可以帮助你轻松绘制欧几里得图形(将下面的代码与使用“纯” TikZ 的代码进行比较):
\documentclass{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmax=5,xmin=-4,ymax=4,ymin=-1]
\tkzAxeXY
\tkzGrid
\tkzDefPoint[label=right:$A$](3,2){A}
\tkzDefPoint[label=right:$B$](5,4){B}
\tkzDefPoint[label=left:$C$](-3,4){C}
\tkzDefPoint[label=left:$D$](-3,0){D}
\tkzDrawSegments[color=red!70!black,line width=1pt](A,B B,C C,D D,A)
\tkzDrawPoints[color=red!70!black](A,B,C,D)
\end{tikzpicture}
\end{document}
答案2
和pgfplots
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle,enlargelimits,
xlabel=$x$,ylabel=$y$,nodes near coords]
\addplot+[point meta=explicit symbolic] coordinates{
(3,2) [A]
(5,4) [B]
(-3, 4)[C]
(-3, 0)[D]
}; % Add "-- cycle" if you want to close the drawing
\end{axis}
\end{tikzpicture}
\end{document}
答案3
现在有了 MetaPost(和 LuaLaTeX)。
\documentclass[12pt, border = 5bp]{standalone}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
u = 1.5cm; len := 3bp;
xmin := -3.5u; xmax := 5.75u; ymin := -.5u; ymax := 4.75u;
pair A, B, C, D; A = u*(3,2); B = u*(5,4); C = u*(-3, 4); D = u*(-3,0);
beginfig(1);
labeloffset := 5bp;
for i = -3 upto 5:
if i <> 0: draw (i*u, -len) -- (i*u, len);
label.bot("$" & decimal i & "$", (i*u, 0)); fi
endfor
for j = 1 upto 4:
draw (-len, j*u) -- (len, j*u);
label.lft("$" & decimal j & "$", (0, j*u));
endfor
drawarrow (xmin, 0) -- (xmax, 0); drawarrow (0, ymin) -- (0, ymax);
draw A -- B -- C -- D -- cycle;
labeloffset := 3bp;
dotlabel.rt("$A$", A); dotlabel.rt("$B$", B);
dotlabel.lft("$C$", C); dotlabel.ulft("$D$", D);
label.llft("$O$", origin); label.bot("$x$", (xmax, 0)); label.lft("$y$", (0, ymax));
endfig;
\end{mplibcode}
\end{document}
当我这样做时:另一个带有mfpic
包裹:
\documentclass[12pt]{scrartcl}
\usepackage[metapost]{mfpic}
\setlength{\mfpicunit}{1cm}
\opengraphsfile{\jobname}
\begin{document}
\begin{mfpic}[1.5]{-3.5}{5.75}{-0.5}{4.75}
\pointdef{A}(3, 2)
\pointdef{B}(5, 4)
\pointdef{C}(-3, 4)
\pointdef{D}(-3, 0)
\polygon{\A, \B, \C, \D}
\point{\A, \B, \C, \D}
\doaxes{xy}
\xmarks{-3 upto -1}\xmarks{1 upto 5}
\ymarks{1 upto 4}
\tlpointsep{3pt}
\tlabels{[tr](0, 0){$O$} [tc](\xmax, 0){$x$} [cr](0, \ymax){$y$}
[cl](\Ax, \Ay){$A$} [cl](\Bx, \By){$B$} [cr](\Cx, \Cy){$C$} [br](\Dx, \Dy){$D$}}
\tlpointsep{6pt}
\axislabels{x}{{$-3$}-3, {$-2$}-2, {$-1$}-1, {$1$}1, {$2$}2, {$3$}3, {$4$}4, {$5$}5}
\axislabels{y}{{$1$}1, {$2$}2, {$3$}3, {$4$}4}
\end{mfpic}
\closegraphsfile
\end{document}
首先使用 LaTeX 运行它(使用任何引擎),然后使用 MetaPost,然后再次使用 LaTeX 运行它。
编辑再次,这次使用 Asymptote,一如既往的简短和高效。使用命令运行asy
。
import graph;
unitsize(1.5cm);
real Xmin=-4, Xmax=5, Ymin=-.5, Ymax=5;
pair A = (3, 2), B = (5,4), C = (-3, 4), D = (-3, 0);
draw (A--B--C--D--cycle);
xaxis(xmin=Xmin, xmax=Xmax, Ticks(Step=1, OmitTick(0, Xmax)), arrow=Arrow);
yaxis(ymin=Ymin, ymax=Ymax, Ticks(Step=1, OmitTick(0, Ymax)), arrow=Arrow);
label("$x$", (Xmax, 0), S); label("$y$", (0, Ymax), W);
dot(Label("$A$", A, E)); label("$O$", (0, 0), SE); dot(Label("$B$", B, E));
dot(Label("$C$", C, W)); dot(Label("$D$", D, NW));
答案4
试试这个。如果需要,你只需要修复轴。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[->] (-10,0) -- (10,0) node[below] {$x$};
\draw[->] (0,-5) -- (0,10) node[left] {$y$};
\draw (3,2) -- (5,4) -- (-3,4) -- (-3,0);
\end{tikzpicture}
\end{document}