如果我使用中心轴线,它们似乎不被 z 缓冲区认为有价值。表面被绘制在它们上面,即使它们应该在它们后面 - 就像这样:
使用的代码:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[%
axis equal,
axis lines=center,
scale uniformly strategy=units only,
view/h=40,
]
\addplot3[%
patch,
opacity=0.8,
z buffer=auto
]
coordinates { (0,1,0) (1,1,1) (-1,1,1) };
\end{axis}
\end{tikzpicture}
\end{document}
我是否必须先绘制透明轴,然后绘制它们后面的对象,然后添加新的轴环境,最终绘制轴线前面的所有对象,或者有没有更优雅的方法来实现这一点?
编辑:我最终自己玩了 z-buffer 并手动绘制轴线,如下所示:
\draw[line width=.275] (axis cs: 0,0,0) -- (axis cs: 0,0,2.55);
但是,当必须放大轴时,这会变得非常烦人,这样您就不会有被遮挡的箭头,将图分成后部和前部,以便能够重新绘制中间的轴线......必须有一个更好的解决方案。
答案1
这是已知的限制pgfplots
;没有解决方法(比较参考手册部分“开始使用 3D 之前”)。
你可以采取axis lines*=left
这样的措施,使效果不可见。
答案2
你可以尝试tikz-3dplot
。
例子
在这里你可以看到X-轴将表面“移到”正确的位置。
代码
\documentclass[tikz]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{40}
\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords,fill opacity=.5]
\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
{sqrt(15/2)/2*sin(\tdplottheta)^2}{black}%
{2*\tdplotphi - 6 * \tdplottheta}{\draw[color=black,thick,->] (0,0,0)
-- (2,0,0) node[anchor=north east]{$x$};}%
{\draw[color=black,thick,->] (0,0,0)
-- (0,2,0) node[anchor=south east]{$y$};}%
{\draw[color=black,thick,->] (0,0,0)
-- (0,0,1) node[anchor=south]{$z$};}%
\tdplotshowargcolorguide{3}{-.2}{.1}{1}
\end{tikzpicture}
\end{document}