![pgfplots 在表面“切割”时的假定误差](https://linux22.com/image/269644/pgfplots%20%E5%9C%A8%E8%A1%A8%E9%9D%A2%E2%80%9C%E5%88%87%E5%89%B2%E2%80%9D%E6%97%B6%E7%9A%84%E5%81%87%E5%AE%9A%E8%AF%AF%E5%B7%AE.png)
我正在努力通过使用软件包进行 3D 表示pgfplots
。我面临着一个所谓的错误pgfplots
(从我的角度来看)。考虑 txt 文件(附件这里) 以及使用它的以下代码:
\documentclass[a4paper,11pt]{memoir}
\usepackage{pgfplots}
\pgfplotsset{/pgf/number format/use comma}
\begin{document}
\begin{tikzpicture}
\begin{axis} [view={45}{35},
xlabel=$\sigma_2$,
ylabel=$\sigma_1$,
zlabel={$\phi$},
%zmin=-6E-5,
%zmax=0,
grid=major,
colormap/blackwhite,
title={Grafico}]
\addplot3 [surf,z buffer=sort] file {grafico.txt};
\end{axis}
\end{tikzpicture}
\end{document}
尝试按照我写的方法编译它并查看表面。现在尝试取消注释这些行zmin =-6E-5
并zmax = 0,
重新编译。如您所见,表面的剪辑是相对于图表的最外边缘进行的,而不是相对于平面进行的,z = 0,
这是理所当然的。
我也尝试了分析公式:
\documentclass[a4paper,11pt]{memoir}
\usepackage{pgfplots}
\pgfplotsset{/pgf/number format/use comma,compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis} [view={25}{35},
xlabel=$\sigma_1$,
ylabel=$\sigma_2$,
zlabel={$\varphi$},
% xmin=-.0025,
% xmax=.0025,
% ymin=-.01,
% ymax=.01,
zmin=-6E-5,
zmax=0,
grid=major,
colormap/blackwhite,
title={Grafico}]
\addplot3 [surf, shader=interp, z buffer=sort, samples=15, domain=-.0025:.0025, y domain=-.01:.01] {y^2-.9^2*(x-2.8E-3)^2+2*4.032E-3*(x-2.8E-3)};
\end{axis}
\end{tikzpicture}
\end{document}
但这也不起作用。你知道如何纠正这个错误吗?或者,你能告诉我我错在哪里吗?
答案1
max()
您可以通过/构造将过高/过低的值设置为上限/下限min()
(这可能是不理想的),也可以使用键z filter
。由于这两种情况,绘图变得更加“不流畅”,我使用了samples=50
,这会让事情变得慢很多,所以您可能应该使用外部的图书馆蒂克兹。
代码
\documentclass[tikz,border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{/pgf/number format/use comma,compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[ view={25}{35},
xlabel=$\sigma_1$,
ylabel=$\sigma_2$,
zlabel={$\varphi$},
grid=major,
%colormap/blackwhite,
title={Grafico},
unbounded coords=jump,
]
\addplot3 [surf, shader=interp, z buffer=sort, samples=50, domain=-.0025:.0025, y domain=-.01:.01] {min(max(y^2-.9^2*(x-2.8E-3)^2+2*4.032E-3*(x-2.8E-3),-6E-5),0)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}
[ view={25}{35},
xlabel=$\sigma_1$,
ylabel=$\sigma_2$,
zlabel={$\varphi$},
grid=major,
%colormap/blackwhite,
title={Grafico},
z filter/.code={\pgfmathparse{or(#1>0,#1<-0.00006) ? nan : #1}},
unbounded coords=jump,
%unbounded coords=discard, % looks worse than jump
]
\addplot3 [surf, shader=interp, z buffer=sort, samples=50, domain=-.0025:.0025, y domain=-.01:.01] {y^2-.9^2*(x-2.8E-3)^2+2*4.032E-3*(x-2.8E-3)};
\end{axis}
\end{tikzpicture}
\end{document}
输出
编辑1:作为杰克指出,我重新发明了轮子并手动完成了使用键restrict z to domain*=-6E-5
和可以做的事情restrict z to domain=-6E-5
,其中前者将产生左输出,而后者将产生右输出。