pgfplots v1.11 中弧线的奇怪行为

pgfplots v1.11 中弧线的奇怪行为

这种情况仅在我更新到最新的 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

这是pgfplots1.11 中的一个错误:它带有一个新功能,允许写入(1,1)而不是(axis cs:1,1)。不幸的是,当涉及到弧时,该功能被错误地应用了。换句话说:是的,这是 pgfplots 1.11 中的一个错误。

这个问题已经得到解决,并将成为 pgfplots 1.12 的一部分(计划于 2015 年 1 月发布)。您的示例在pgfplots1.12 的预发布版本中运行良好(无需修改)。


一个解决方法似乎是:

  1. 使用compat=1.10
  2. 使用disabledatascaling
  3. (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}

相关内容