我正在根据一些数据文件在 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
在轮廓图中被忽略。