在 pgfplots 中自定义圆环图

在 pgfplots 中自定义圆环图

我正在尝试制作一个漂亮的圆环图来说明其参数化。我有这个:

在此处输入图片描述

但我希望得到这个:

![在此处输入图片描述

有一系列我不知道该怎么做的事情:

  1. 将轴标签移近轴并反y转轴。
  2. 带来积极的部分xz轴置于前景。
  3. 添加长半径和短半径ab如图所示。
  4. 裁剪右上方和右上方的白色空间。

这是当前代码。

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[axis equal image,
        xlabel=$x$, ylabel=$y$, zlabel=$z$,
        axis lines=middle,
        xmax=18,ymax=20,zmax=5,
        ticks=none,
        clip bounding box=upper bound,
        colormap/blackwhite]

        \addplot3[domain=0:360,y domain=0:320, samples=20,surf,z buffer=sort]
            ({(12 + 3 * cos(x)) * cos(y)} ,
            {(12 + 3 * cos(x)) * sin(y)},
            {3 * sin(x)});
    \end{axis}
\end{tikzpicture} 
\end{document}

答案1

您可以使用轴坐标系将常规 tikz 命令放在 pgfplot 轴中。为了将轴置于前台,我使用了相同的方法来伪造的轴。这是不是其他地块的通用解决方案。

如果反转 y 轴,系统将不会采用右手坐标系,而人们通常认为轴是右手坐标系。最好将 x 轴置于图片的前面,将 y 轴置于图片的右侧(z 轴仍指向上方)。

圆环

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[axis equal image,
        axis lines=middle,
        xmax=18,ymax=20,zmax=5,
        ticks=none,
        clip bounding box=upper bound,
        colormap/blackwhite]

        \addplot3[domain=0:360,y domain=0:320, samples=40,surf,z buffer=sort]
            ({(12 + 3 * cos(x)) * cos(y)} ,
            {(12 + 3 * cos(x)) * sin(y)},
            {3 * sin(x)});
        %use axis coordinate system to draw the radii
        \draw [thick, blue] (axis cs: 0,0,0) -- node [yshift=0.5em]{$a$} (axis cs: 12,0,0);
        \draw [thick, red] (axis cs: 12,0,0) -- node [xshift=0.5em]{$b$}(axis cs: 12,0,3);

        %use axis coordinate system to draw FAKE x, y and z axes
        \draw [-latex]  (axis cs: 0,0,0) -- node [pos=0.9, xshift=0.5em]{$z$}(axis cs: 0,0,10);
        \draw [-latex]  (axis cs: 0,-15,0) --
         node [pos=0.9, xshift=-1em, yshift=0.5em]{$y$}(axis cs: 0,-20,0);
        \draw (axis cs: 0,0,0) -- (axis cs: 0,9,0);
        \draw (axis cs: 0,0,0) -- (axis cs: -9,0,0);
    \end{axis}
\end{tikzpicture} 
\end{document}

相关内容