我有一个 PGFplots 轴环境,在其中我尝试绘制几个线对象和一个表面对象。
必须对对象进行“排序”,即哪个对象画在另一个对象之前或之后。
PGFplots 中的密钥z buffer
应该可以解决这个问题,但我似乎无法让它正常工作。
根据脚本中对象的顺序,表面对象会使线对象消失,或者线对象仅显示在表面对象的顶部,而它们应该在后面。
我该如何解决这个问题?
最小工作示例:
\documentclass{standalone}
\usepackage{filecontents}
\begin{filecontents}{3ddata.dat}
0 0 0
0.125 0 0
0.25 0 0
0.375 0 0
0.5 0 0
0.5 0 0
0.625 0 0
0.75 0 0
0.875 0 0
1 0 0
0 0.125 0.25
0.125 0.125 0.1875
0.25 0.125 0.125
0.375 0.125 0.0625
0.5 0.125 0
0.5 0.125 0
0.625 0.125 0
0.75 0.125 0
0.875 0.125 0
1 0.125 0
0 0.25 0.5
0.125 0.25 0.375
0.25 0.25 0.25
0.375 0.25 0.125
0.5 0.25 0
0.5 0.25 0
0.625 0.25 0
0.75 0.25 0
0.875 0.25 0
1 0.25 0
0 0.375 0.75
0.125 0.375 0.5625
0.25 0.375 0.375
0.375 0.375 0.1875
0.5 0.375 0
0.5 0.375 0
0.625 0.375 0
0.75 0.375 0
0.875 0.375 0
1 0.375 0
0 0.5 1
0.125 0.5 0.75
0.25 0.5 0.5
0.375 0.5 0.25
0.5 0.5 0
0.5 0.5 0
0.625 0.5 0
0.75 0.5 0
0.875 0.5 0
1 0.5 0
0 0.5 1
0.125 0.5 0.75
0.25 0.5 0.5
0.375 0.5 0.25
0.5 0.5 0
0.5 0.5 0
0.625 0.5 0
0.75 0.5 0
0.875 0.5 0
1 0.5 0
0 0.625 0.75
0.125 0.625 0.5625
0.25 0.625 0.375
0.375 0.625 0.1875
0.5 0.625 0
0.5 0.625 0
0.625 0.625 0
0.75 0.625 0
0.875 0.625 0
1 0.625 0
0 0.75 0.5
0.125 0.75 0.375
0.25 0.75 0.25
0.375 0.75 0.125
0.5 0.75 0
0.5 0.75 0
0.625 0.75 0
0.75 0.75 0
0.875 0.75 0
1 0.75 0
0 0.875 0.25
0.125 0.875 0.1875
0.25 0.875 0.125
0.375 0.875 0.0625
0.5 0.875 0
0.5 0.875 0
0.625 0.875 0
0.75 0.875 0
0.875 0.875 0
1 0.875 0
0 1 0
0.125 1 0
0.25 1 0
0.375 1 0
0.5 1 0
0.5 1 0
0.625 1 0
0.75 1 0
0.875 1 0
1 1 0
\end{filecontents}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
% Plot the function cuts at the boundary.
\addplot3 [color=red,solid] table {
0 0.5 0
0 0 1
0.5 0 0
};
\addplot3 [color=red,solid] table {
0 0 0
0.5 0 1
1 0 0
};
\addplot3 [color=red,solid] table {
0.5 0 0
1 0 1
1 0.5 0
};
\addplot3 [color=red,solid] table {
0 1 0
0 0.5 1
0 0 0
};
\addplot3 [color=red,solid] table {
1 0 0
1 0.5 1
1 1 0
};
\addplot3 [color=red,solid] table {
0.5 1 0
0 1 1
0 0.5 0
};
\addplot3 [color=red,solid] table {
1 1 0
0.5 1 1
0 1 0
};
\addplot3 [color=red,solid] table {
1 0.5 0
1 1 1
0.5 1 0
};
% Plot function on the interior.
\addplot3
[
surf,
mesh/rows=10,
blue,
faceted color=black,
]
table[header=false] {3ddata.dat};
\end{axis}
\end{tikzpicture}
\end{document}
最终结果如下:
答案1
手册(v1.11)的第 4.6.1 节pgfplots
有以下内容z buffer
:
pgfplots 在一定程度上支持 z 缓冲技术:它对于单散点图(z buffer=sort)、网格或曲面图(z buffer=auto)或参数网格和曲面图(z buffer=sort)效果很好。但是,它不能组合不同的 \addplot 命令,这些命令将按出现的顺序绘制。有时您可能会遇到限制。也许它会在未来的版本中得到改进。
如果您决定需要高复杂度、高速度和 100% 可靠的 z 缓冲区(深度信息),则应考虑使用其他可视化工具,并在几年后返回 pgfplots。如果您可以等待复杂的图片,并且甚至看不到 z 缓冲限制带来的限制,则应该使用 pgfplots。
就你的情况而言,由于你使用不同的\addplot
命令来绘图,所以你改变出现顺序的努力不会奏效。你应该尝试使用单个\addplot
命令(如果可能)或尝试使用其他工具来绘制图形。