我想畫一個半徑在資料座標中指定的圓。但我不明白。這是一個半徑為「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
compat
使用 PGFPlot 時應始終設定等級。透過將其設為新值,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
請大聲抱怨並發出警告......沒有人讀過;-)