我想绘制一个半径在数据坐标中指定的圆。但我不明白。这是一个半径为“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
则会大声发出警告...没有人会读到;-)