我想知道如何在 addplot3 surf 图中删除坐标。这是一个简化的示例:
\begin{tikzpicture}
\begin{axis}[clip=false,view={45}{45},grid=major]
\addplot3[surf,mesh/rows=3,shader=flat,draw=black] coordinates {
(1,1,0)(1,2,5)(1,3,7)
(2,1,0)(2,2,0)(2,3,4)
(3,1,0)(3,2,0)(3,3,0)};
\addplot3 coordinates {(1,1,0) (3,3,0)};
\end{axis}
\end{tikzpicture}
我想要删除的部分位于红线下方(因为在我的应用程序中,矩阵是对称的,并且此部分不添加任何信息)。在 Matlab 中,我可以通过在 surf 图中使用 NaN 作为 z 值来实现这一点,因为 Matlab 不会绘制 NaN。有没有办法用 pgfplots 做到这一点?
答案1
其默认配置unbounded coords=discard
将会默默地丢弃输入坐标,就好像它们根本没有出现一样。
您需要的是unbounded coords=jump
:在这种情况下,每个具有无界坐标的补丁都将被跟踪,但根本不会绘制:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
\begin{axis}[clip=false,view={45}{45},grid=major]
\addplot3[surf,mesh/rows=3,shader=flat,unbounded coords=jump,draw=black] coordinates {
(1,1,0)(1,2,5)(1,3,7)
(2,1,nan)(2,2,0)(2,3,4)
(3,1,nan)(3,2,nan)(3,3,0)};
\addplot3 coordinates {(1,1,0) (3,3,0)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[clip=false,view={45}{45},grid=major]
\addplot3[surf,unbounded coords=jump,shader=flat,draw=black] coordinates {
(1,1,0)(1,2,5)(1,3,7)
(2,1,0)(2,2,0)(2,3,4)
(3,1,nan)(3,2,0)(3,3,0)};
\addplot3 coordinates {(1,1,0) (3,3,0)};
\end{axis}
\end{tikzpicture}
\end{document}
因此,您需要获得较小的分辨率才能解决整体问题。
鉴于您有对角线切割,这也许patch type=triangle
也是一个好主意 - 但您需要相应地调整坐标的输入格式。