这种情况仅在我更新到最新的 pgfplots 版本 v 1.11 后发生,并且编译后结果很好。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\usepackage{amsmath}
%\usetikzlibrary{}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
scale mode = scale uniformly,
grid=none,
xmin=-1.2,
xmax= 1.2,
ymin=-.55,
ymax= .55,
xtick={-1,-0.5,...,1},
ytick={-1,-0.5,...,1},
minor y tick num=3,
minor x tick num=1,
width= .75\textwidth,
height=.33\textwidth,
scale only axis,
xlabel={x},
ylabel={y}
]
\pgfmathsetmacro{\radius}{.5};
\pgfmathsetmacro{\gamma}{35};
\pgfmathsetmacro{\beta}{20};
\draw [black!80] (0,0) arc[start angle=90, delta angle=\gamma-90, radius=\radius];
\draw [ultra thick] (0,-0.5) arc[start angle=-90, end angle=180, radius=\radius];
\end{axis}
\end{tikzpicture}%
\end{document}
我得到了以下结果,我无法理解。失真来自哪里?我应该看到一个漂亮的 3/4 圆,不是吗?
答案1
这是pgfplots
1.11 中的一个错误:它带有一个新功能,允许写入(1,1)
而不是(axis cs:1,1)
。不幸的是,当涉及到弧时,该功能被错误地应用了。换句话说:是的,这是 pgfplots 1.11 中的一个错误。
这个问题已经得到解决,并将成为 pgfplots 1.12 的一部分(计划于 2015 年 1 月发布)。您的示例在pgfplots
1.12 的预发布版本中运行良好(无需修改)。
一个解决方法似乎是:
- 使用
compat=1.10
- 使用
disabledatascaling
用
(axis cs:0,0)
代替(0,0)
。\documentclass{standalone} \usepackage{tikz} \usepackage{pgfplots} \pgfplotsset{compat=1.10} \usepackage{amsmath} %\usetikzlibrary{} \begin{document} \begin{tikzpicture} \begin{axis}[% disabledatascaling, scale mode = scale uniformly, grid=none, xmin=-1.2, xmax= 1.2, ymin=-.55, ymax= .55, xtick={-1,-0.5,...,1}, ytick={-1,-0.5,...,1}, minor y tick num=3, minor x tick num=1, width= .75\textwidth, height=.33\textwidth, scale only axis, xlabel={x}, ylabel={y} ] \pgfmathsetmacro{\radius}{.5}; \pgfmathsetmacro{\gamma}{35}; \pgfmathsetmacro{\beta}{20}; \draw [black!80] (axis cs:0,0) arc[start angle=90, delta angle=\gamma-90, radius=\radius]; \draw [ultra thick] (axis cs:0,-0.5) arc[start angle=-90, end angle=180, radius=\radius]; \end{axis} \end{tikzpicture}% \end{document}
答案2
我猜想在处理控制点等坐标时,单位存在一些问题pgfplots
。(另一方面,弧的端点在正确的位置。)在这种情况下,我发现指定单位会使弧更像弧。例如:
\draw[black!80](0,0)arc[start angle=90,delta angle=\gamma-90,radius=\radius pt];
但是,由于您指定了明确的长度,因此这会忽略axis cs
(默认)坐标系。经过一些工作 您可以提取缩放因子并乘以\radius
它。现在一切看起来都很好。
\documentclass[tikz]{standalone}
\usepackage{pgfplots}\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[scale mode=scale uniformly,xmin=-1.2,xmax= 1.2,ymin=-.55,ymax= .55]
\pgfplotsextra{
\pgfplotstransformdirectionx{1}
\pgfmathsetlengthmacro{\ex}{\pgfmathresult*\pgfplotsunitxlength}
\pgfmathsetmacro{\radius}{.5*\ex};\pgfmathsetmacro{\gamma}{35};}
\draw[black!80](0,0)arc[start angle=90,delta angle=\gamma-90,radius=\radius pt];
\draw[ultra thick](0,-0.5)arc[start angle=-90,end angle=180,radius=\radius pt];
\end{axis}
\end{tikzpicture}
\end{document}