Edit and compile if you like:
\documentclass{standalone}\usepackage{pgfplots}\pgfplotsset{compat=newest}\begin{document}\begin{tikzpicture}\begin{axis}[axis equal image,axis lines=middle,xmax=18,zmax=5,ticks=none,clip bounding box=upper bound,colormap/blackwhite]\addplot3[domain=0:360,y domain=0:320, samples=50,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) -- (axis cs: 12,0,0) node [midway,above=-2] {$R$};\draw [thick,red] (axis cs: 12,-0.2,0) -- (axis cs: 12,3.7,0) node [midway,below right=-3] {$r$};% 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}
Click to download: torus.tex
Open in Overleaf: torus.tex
This file is available on tikz.netlify.app and on GitHub and is MIT licensed.
See more on the author page of Janosh Riebesell..