![pgfplots:填充三维表面下的体积](https://linux22.com/image/258699/pgfplots%EF%BC%9A%E5%A1%AB%E5%85%85%E4%B8%89%E7%BB%B4%E8%A1%A8%E9%9D%A2%E4%B8%8B%E7%9A%84%E4%BD%93%E7%A7%AF.png)
我有一个非常简单的 3d 图。
\begin{tikzpicture}
\begin{axis}[view={60}{20},
%axis equal image=true,
xlabel=$X(T)$, ylabel={$D(T)$}, zlabel={$V(T)$},
zmin=0
]
\addplot3[surf,shader=flat,z buffer=sort,
samples=30,domain=0:100,y domain=0:100]
{x+y};
\end{axis}
\end{tikzpicture}
此代码绘制了一个表面。我希望看到的是表面下方的体积被着色。此外,我想以某种方式将填充的体积标记为“默认”。我翻遍了手册的所有页面,但找不到任何解决方案。有人知道怎么做吗?
非常感谢。
答案1
不幸的是,我在整理了他所推荐的内容后才阅读了 Christian Feuersänger 的评论;所以您可以这样做,但您需要手动指定边缘处的点,这对于曲面来说会非常复杂:
代码
\documentclass[tikz,border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[view={60}{20},
%axis equal image=true,
xlabel=$X(T)$, ylabel={$D(T)$}, zlabel={$V(T)$},
zmin=0
]
\fill[opacity=0.5,red] (axis cs: 0,0,0) -- (axis cs: 100,0,100) -- (axis cs: 100,0,0) -- cycle;
\fill[opacity=0.5,yellow] (axis cs: 0,0,0) -- (axis cs: 0,100,100) -- (axis cs: 0,100,0) -- cycle;
\fill[opacity=0.5,green] (axis cs: 100,0,100) -- (axis cs: 100,100,200) -- (axis cs: 100,100,0) -- (axis cs: 100,0,0) -- cycle;
\fill[opacity=0.5,blue] (axis cs: 0,100,100) -- (axis cs: 100,100,200) -- (axis cs: 100,100,0) -- (axis cs: 0,100,0) -- cycle;
\addplot3[surf,shader=flat,z buffer=sort,samples=30,domain=0:100,y domain=0:100]{x+y};
\end{axis}
\end{tikzpicture}
\end{document}
输出
编辑1:您还可以伪造颜色渐变(在这个简单的例子中):
代码
\documentclass[tikz,border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[ view={60}{20},
xlabel=$X(T)$,
ylabel={$D(T)$},
zlabel={$V(T)$},
zmin=0,
]
\fill[opacity=1,left color=blue, right color=yellow] (axis cs: 0,0,0) -- (axis cs: 100,0,100) -- (axis cs: 100,0,0) -- cycle;
\fill[opacity=1,bottom color=yellow, top color=red] (axis cs: 100,0,100) -- (axis cs: 100,100,200) -- (axis cs: 100,100,0) -- (axis cs: 100,0,0) -- cycle;
\addplot3[surf,shader=flat,z buffer=sort,samples=30,domain=0:100,y domain=0:100]{x+y};
\end{axis}
\end{tikzpicture}
\end{document}