pgfplots 在表面“切割”时的假定误差

pgfplots 在表面“切割”时的假定误差

我正在努力通过使用软件包进行 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-5zmax = 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,其中​​前者将产生左输出,而后者将产生右输出。

相关内容