为什么垂直轴上有这么多额外的空间?这对我来说一直是个问题。有简单的解决办法吗?我做错了什么?
\documentclass[11 pt]{article}
\pagestyle{empty}
\usepackage{tikz, pgfplots}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=1.5]
\begin{axis}[axis x line=middle, axis y line=middle, samples=200,
axis equal, grid, xmin=0, xmax=9, ymin=0,ymax=4, xtick={0,1,...,9}, ytick={0,1,...,4}
]
\addplot[domain=0:9,thick]{sqrt(x)};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
答案1
欢迎使用 TeX.SE!由于您使用了axis equal
,我假设您想要一个正交坐标系。此/pgfplots/axis equal
PGF 键相当于unit vector ratio=1 1 1
,与 相同unit vector ratio=1 1
(当提供的值少于 3 个时,将隐式使用尾随值)。您想要实现的问题是 试图unit vector ratio=1 1
保留定义的(或默认的)图形宽度和高度,并且为了做到这一点,由于您施加了 x/y 比率,它必须增加一个轴的限制(此处:是轴)。幸运的是,unit vector ratio*=1 1
还有一种替代方案,它倾向于调整图形尺寸以扩大限制。
因此,通过unit vector ratio*=1 1
和xmin=0, xmax=9, ymin=0, ymax=4
(来自您的示例的值),您将获得以下内容:
如果要非常紧密地拟合曲线,请使用相同的方法,但用ymax=3
代替ymax=4
:
完整代码:
\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[scale=1.5]
\begin{axis}[axis x line=middle, axis y line=middle, samples=200,
unit vector ratio*=1 1, grid, xmin=0, xmax=9, ymin=0, ymax=3,
xtick={0,...,9}, ytick={0,...,4},
]
\addplot[domain=0:9,thick] {sqrt(x)};
\end{axis}
\end{tikzpicture}
\end{document}
正如 @Zarko 指出的那样,可以通过 自动得出几个值xtick={0,...,9}
。pgfplots
考虑到 可以axis lines=middle
替换axis x line=middle, axis y line=middle
,因此第一张图片仅需以下方法即可获得:
\begin{axis}[axis lines=middle, samples=200, unit vector ratio*=1 1,
grid, xtick={0,...,9}, ymax=4,
]
\addplot[domain=0:9,thick] {sqrt(x)};
\end{axis}
第二个,除 外,其他选项均相同ymax=4
。
PS:您的示例有许多不需要的包,下次请将其删除!
答案2
答案3
@frougon 的回答有一点变化:
\documentclass[11 pt]{article}
\pagestyle{empty}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=1.5]
\begin{axis}[
axis lines=middle,
unit vector ratio*=1 1,
grid,
xtick={0,1,...,9},
xmax=9,
ymax=3,
samples at={0,0.05,...,1,1.5,2,...,9}
]
\addplot[thick]{sqrt(x)};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
如您所见,主要区别在于使用samples at={...}
而不是用来定义域domain=...
。这给出了使用少得多的(非线性分布)样本几乎相同的结果:
答案4
如果有人想要 TikZ 解决方案:
\documentclass[11 pt]{article}
\usepackage{tikz,lipsum}
\begin{document}
\lipsum[1]
\begin{center}
\begin{tikzpicture}
\draw[gray!50] (0,0) grid (9,4);
\draw[stealth-stealth] (0,4)|-(9,0);
\foreach \i in {0,...,9} \path (\i,0) node[below=1mm]{$\i$};
\foreach \j in {1,...,4} \path (0,\j) node[left=1mm]{$\j$};
\draw[thick,smooth,orange,samples=200] plot[domain=0:9] (\x,{sqrt(\x)});
\end{tikzpicture}
\end{center}
\lipsum[1]
\end{document}