我有一张图,其中垂直轴被曲线隐藏。axis on top
当然,添加选项会导致轴出现在图上。是否可以仅显示轴的可见部分?
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[view={-20}{20},xlabel=$\theta$,axis equal,axis lines=center,enlargelimits,ticks=none,width=.45\textwidth]
\addplot3
[domain=0:360,y domain=0:180, variable=\u, variable y=\v,samples=40,z buffer=sort,surf,colormap/cool]
({(sin(u)^2*sin(u)*cos(v)}, {sin(u)^2*sin(u)*sin(v)}, {sin(u)^2*cos(u)});
\end{axis}
\end{tikzpicture}
\end{document}
答案1
Pgfplots 目前仅支持在一条图内移除隐藏线\addplot
。因此,无法让它自动确定示例中的可见部分。
您可能对这个问题的解决方法感兴趣。一种方法是使用axis lines
不与图相交的线,即位于图的前面或后面的线。在这种情况下,需要刻度线和/或网格线,以便可以轻松看到视角:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[view={-20}{20},xlabel=$\theta$,axis equal,axis lines=left,enlargelimits,grid=major,width=.45\textwidth]
\addplot3
[domain=0:360,y domain=0:180, variable=\u, variable y=\v,samples=40,z buffer=sort,surf,colormap/cool]
({(sin(u)^2*sin(u)*cos(v)}, {sin(u)^2*sin(u)*sin(v)}, {sin(u)^2*cos(u)});
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我认为这个tikz-3dplot
包裹可能对你有用。
我不是专家,因此我的回答并不完全正确(例如,你必须用你的函数来代替sin(\tdplottheta)^2
),但我发布它是因为其他人可能会改进它或者它可能在某种程度上帮助你。
但是看到包装文档了解更多信息。
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{330}
\begin{tikzpicture}[line join=bevel,tdplot_main_coords, fill]
\tdplotsphericalsurfaceplot[parametricfill]{36}{48}%
{sin(\tdplottheta)^2}% you have to put the correct function here
{black}{-\tdplotr}%
{\draw[color=black,thick,->] (-2,0,0) -- (2,0,0) node[anchor=north east]{$\theta$};}%
{\draw[color=black,thick,->] (0,-2,0) -- (0,2,0);}%
{\draw[color=black,thick,->] (0,0,-1) -- (0,0,1);}%
\end{tikzpicture}
\end{document}