我正在尝试制作一个漂亮的圆环图来说明其参数化。我有这个:
但我希望得到这个:
有一系列我不知道该怎么做的事情:
- 将轴标签移近轴并反
y
转轴。 - 带来积极的部分
x
和z
轴置于前景。 - 添加长半径和短半径
a
,b
如图所示。 - 裁剪右上方和右上方的白色空间。
这是当前代码。
\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}