如何在使用数据坐标的 pgfplots 中绘制圆圈?

如何在使用数据坐标的 pgfplots 中绘制圆圈?

我想绘制一个半径在数据坐标中指定的圆。但我不明白。这是一个半径为“5”的圆,但其数据坐标半径似乎只有 0.05。我遗漏了什么?

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
% pgfplots package manual at https://ctan.org/pkg/pgfplots?lang=en

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xmin=-0.7,xmax=0, xlabel={$x$}, xtick={-1,-0.9,...,0}, minor xtick={-1,-0.95,...,0}, 
    ymin=0.3,ymax=1.0, ylabel={$y$}, ytick={0, 0.1,...,1}, minor ytick={0, 0.05,...,1},
    samples=500,domain=-1:0,
    grid=both,
    title={\large shapes on axis}]
    
  \addplot[blue]({x}, {1-x*x} );
  \draw (axis cs:-0.4,0.5) circle [radius=5];
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

使用 PGFPlots 时,您应该始终设置compat级别。通过将其设置为新值,axis cs内部为默认值axis,圆的半径符合预期。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xmin=-0.7,xmax=0, xlabel={$x$}, xtick={-1,-0.9,...,0}, minor xtick={-1,-0.95,...,0}, 
    ymin=0.3,ymax=1.0, ylabel={$y$}, ytick={0, 0.1,...,1}, minor ytick={0, 0.05,...,1},
    samples=500,domain=-1:0,
    grid=both,
    title={\large shapes on axis}]
  \addplot[blue]({x}, {1-x*x} );
  \draw (-0.4,0.5) circle [radius=0.05];
\end{axis}
\end{tikzpicture}
\end{document}

用圆圈绘制

答案2

这只是一个额外的答案,用于进一步解释(正确的)接受答案中给出的行为。

pgfplots具有非常好的向后兼容结构 - 当作者改变某些内容,甚至修复某些错误时,它是在“兼容级别”机制下进行的。

例如,该软件包的最初版本对轴刻度的定位非常松散。Christian Feuersänger 修复了这个问题,但现在出现了一个问题:旧文档中已经完成的所有绘图都会发生变化,给作者带来痛苦的意外工作。因此,即使新行为可能是正确的,也必须手动启用,在这种情况下compat=1.3- 这意味着您不希望与早于此的版本兼容。

在 1.11 版本中,轴环境中的默认坐标系已发生改变,因此addplot和的坐标系draw相同;而之前(如您所见)它们是不同的(详细信息请参阅非常精细的手册)。

最后,如果您不使用兼容级别,pgfplots则会大声发出警告...没有人会读到;-)

相关内容