我一直试图用每隔一个刻度标记来标记 x 轴和 y 轴,花了一段时间才搞清楚。我能够做到,但我想知道是否有更简单的方法来标记 x 轴,而不必在 xticklabels 中输入那么多逗号。代码按我希望的方式工作,只是想看看我是否可以加快一点速度。
另外,有没有更有效的方法来移动 x 和 y 轴标签(秒、英尺/秒)?我也不喜欢 cs: 命令。
感谢您的时间。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[thick,
scale only axis,
grid=major,
axis lines=middle,
inner axis line style={-Triangle},
xlabel={sec},
ylabel={feet per second},
x label style={at={(axis description cs:1,.20)},anchor=north},
y label style={at={(axis description cs:-.05,.5)},rotate=90,anchor=south},
ytick={-20,-10,...,50},
xtick={0,1,...,16},
xticklabels={,,2,,4,,6,,8,,10,,12,,14,,16,}, %MORE EFFICIENT OR EASIER WAY????
ymin=-20,
ymax=50,
xmin=-.5,
xmax=16,
]
\addplot[color=red,ultra thick] coordinates {(0,40) (8,0) (12,-20) (16,0)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
一种方法是使用grid=both, minor x tick num=1
and xtick distance=2,ytick distance=10,
:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\begin{axis}[thick,
axis lines=middle,
axis line style={-Triangle},
scale only axis,
%
grid=both,
minor x tick num=1,
%
xlabel={sec},
ylabel={feet per second},
%
xmin=-.5, xmax=16, xtick distance=2,
ymin=-20, ymax=50, ytick distance=10,
x label style={at={(axis description cs:1,0.2)},anchor=north east, inner sep=0pt},
y label style={at={(axis description cs:-.05,.5)},rotate=90,anchor=south},
]
\addplot[color=red,ultra thick] coordinates {(0,40) (8,0) (12,-20) (16,0)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
通过“cs:命令”,您可能指的是axis description cs:
坐标系。
x label style={at={(axis description cs:1,.20)},anchor=north},
很糟糕。它会根据限制改变到轴的距离 - 尝试设置ymin=-100
以查看它。而且anchor=north
毫无意义,因为垂直位置无论如何都是硬编码的。xticklabel cs:
像这样使用
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle, thick,
xmin=-.5, xmax=16,
ymin=-20, ymax=50,
xlabel={sec},
ylabel={feet per second},
x label style={at={(xticklabel cs:1)}, anchor=north},
ylabel near ticks,
y label style={anchor=center},
xtick distance=2,
minor x tick num=1,
ytick distance=10,
grid=both,
]
\addplot[red, ultra thick] coordinates {(0,40) (8,0) (12,-20) (16,0)};
\end{axis}
\end{tikzpicture}
\end{document}
可以使用标签样式对标签位置进行xshift
微调。yshift
答案3
另一种选择是tkz-base
编辑确实tkz-euclide
在几何学中使用较多;这里不需要这个包。
\tkzDrawSegments[color=red,line width=1pt](A,B B,C)
可以替换为
\draw[very thick,red](A)--(B)--(C);
或者\draw[very thick,red] plot coordinates {(A) (B) (C)};
我们可以tikz
在 中插入命令tkz-base
。对于更复杂的功能,我们可以使用tkz-fct
。
代码
\documentclass[border=5mm]{standalone}
%https://tex.stackexchange.com/questions/673575/more-efficient-way-to-label-axes-in-pgf-plots
\usepackage{tkz-base}
%\usepackage{tkz-euclide}%<-- for \tkzDrawSegments
\begin{document}
\begin{tikzpicture}[yscale=1.2]
\tkzInit[
xmax=16,xstep=2,
ymin=-20,ymax=50,ystep=10
]
\tkzGrid[sub,subxstep=1,subystep=10](0,-20)(16,50)
%\tkzAxeXY
\tkzDrawX[left space=0.25,label = sec,below = 15pt]
\tkzLabelX[orig=false]
%
\tkzDrawY[label = feet per second,midway, above=30pt,sloped]
\tkzLabelY[orig=false]
%
\tkzDefPoints{0/40/A,12/-20/B,16/0/C}
\tkzDrawPoints[color=red,size=4pt](A,B,C)
%\tkzDrawSegments[color=red,line width=1pt](A,B B,C)
%\draw[very thick,red](A)--(B)--(C);
\draw[very thick,red] plot coordinates {(A) (B) (C)};
\end{tikzpicture}
\end{document}