将表面图与等值线图相结合

将表面图与等值线图相结合

我正在根据一些数据文件在 pgfplots 中绘制曲面图(效果很好)。

之后,我想在表面图上绘制一个轮廓图,以模拟一种填充轮廓图。

目前我有两个问题:

  • 编译过程中出现一些错误:! Package PGF Math Error: Could not parse input '' as a floating point number, sorry. The unreadable part was near ''..

  • 等高线以错误的方式连接,而不是被打断(在此示例中为 -50 等值线)

由于我之前从未使用过 gnuplot 或 contourplot 选项,所以我不知道如何消除错误。

代码:

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\usepgfplotslibrary{colormaps}
\pgfplotsset{compat=newest}

\begin{filecontents}{min.txt}
f v p
3.400E1 0.500 -58.174
3.400E1 0.600 -36.901
3.400E1 0.700 -35.791
3.400E1 0.800 -65.193
3.600E1 0.500 -45.351
3.600E1 0.600 -36.959
3.600E1 0.700 -43.273
3.600E1 0.800 -78.534
3.800E1 0.500 -64.744
3.800E1 0.600 -42.736
3.800E1 0.700 -45.362
3.800E1 0.800 -80.150
\end{filecontents}

\begin{document}


\pgfplotsset{colormap/steep/.style={
 colormap={steep}{[1cm]rgb255(0cm)=(255,255,255) rgb255(27cm)=(255,255,254) rgb255(28cm)=(1,0,0) rgb255(42cm)=(0,0,0)
}}}

\begin{tikzpicture}
\begin{axis}[
             z buffer = sort,
             grid=major, 
             axis on top,
             colorbar,
             colormap/viridis,
             mesh/ordering=x varies,
             view={0}{90},  
             tick label style={/pgf/number format/fixed},
             enlargelimits=false,
             xlabel={$x$}, 
             ylabel={$y$}, 
            ]
  \pgfplotstableread{min.txt}\datatable
  % underlying surface plot
  \addplot3[
            mesh/rows=3, 
            surf,  
            shader = interp,         
           ] table [
                    x index = 1,
                    y  index= 0,
                    z index = 2,
                            ]   from \datatable {};
  % contour on top
  \pgfplotsset{contour/every contour label/.style = {
               sloped,
               transform shape,
               every node/.style={
                                 mapped color,
                                 fill=none,
                                },
              },}
  \addplot3[
            mesh/rows=3, 
            mesh/cols=4, 
            colormap/steep,
            contour gnuplot={
                             levels={-65,-50,-40,-35},
            },
            contour/label distance=130pt,
            samples=500,
            contour/labels over line,
           ] table [
                    x index = 1,
                    y  index= 0,
                    z index  = 2,
                   ]   from \datatable {};
\end{axis}
\end{tikzpicture}
\end{document}

如果忽略发生的错误,结果如下: 在此处输入图片描述

对于更高分辨率的输入数据,问题会变得更加严重。除了错误的连接之外,轮廓线似乎还出现了断裂。但这可能只是同一错误的症状……

在此处输入图片描述

答案1

图形问题(重叠轮廓)是编译问题的后续问题。

我启用了调试输出并意识到它们是由于z buffer=sort与一起使用时似乎导致错误输出而造成的contour gnuplot

我删除了它z buffer=sort,一切都很好。我将提高 pgfplots 的稳健性,使其z buffer =sort在轮廓图中被忽略。

相关内容