tikz/pgfplots 中垂直轴上的额外空间

tikz/pgfplots 中垂直轴上的额外空间

为什么垂直轴上有这么多额外的空间?这对我来说一直是个问题。有简单的解决办法吗?我做错了什么?

\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 equalPGF 键相当于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 1xmin=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

在此处输入图片描述 这样可以吗?只需删除选项即可。axis equal其余相同

\begin{tikzpicture}[scale=1.5]
\begin{axis}[axis x line=middle, axis y line=middle, samples=200,
 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}

答案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}

相关内容