提问后pgfplot 对表格数据进行错误投影,我制作了一个新的 MWE(见下文)和测试数据,我认为最好开始一个新线程。我想以线性和对数模式显示带有投影的相同测试表面,来自表达式和表格。表达式为 \newcommand\expr[2]{abs(#1) + abs(#2)+.001}
,相应的表格数据在 MWE 中给出。结果如下:
看起来这两个案件的处理方式不同。在我看来
- 线性表视图仅将 X 投影显示为垂直线;它应该是像 Y 投影一样的 V 形。
表格视图相对于表达式视图旋转(我看到示例程序使用了它
(y,x,{\expr{y}{x}});
,但我找不到“表格”的类似方法。我认为这两个问题是相关的。)虽然我使用了“样本”,但表格视图中没有插入任何中间值。
尽管表面本身进行了旋转,但表格情况下的 Z 投影似乎与表达式情况下的 Z 投影相同。
表格线性 Z 投影是彩色的,但表面没有。
表格对数 Z 投影与线性投影的情况相同,但这次没有颜色。
表格对数 Z 投影轮廓线是按线性计算的,而不是按对数计算的,尽管投影是按对数计算的。
对数视图表达式也存在同样的问题:Z 投影与所有其他投影都不同,并且这里的 X 和 Y 投影被缩放,以至于它们看起来不像是表面的投影。Z 投影的纹理与其他情况不同,并且没有着色。
我是不是误解了什么?
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\pgfplotstableset{%
col sep=semicolon,
x index=0,
y index=1,
z index=2,
header=false
}%
\begin{filecontents*}{XYZ.csv}
-1; -1; 3.001;
-1; 0; 1.001;
-1; 1; 3.001;
0; -1; 2.001;
0; 0; 0.001;
0; 1; 2.001;
1; -1; 3.001;
1; 0; 1.001;
1; 1; 3.001;
\end{filecontents*}
\begin{document}
\begin{tabular}{cc}
\begin{tikzpicture}
\begin{axis}[
domain=-1:1,
domain y=-1:1,
title = Table (lin),
xmin=-1.3, xmax=1.3,% x scale
ymin=-1.9, ymax=3.9, % y scale
zmin=-1, zmax=3.1, % z scale
]
\addplot3[
contour gnuplot={
output point meta=rawz,
number=10,
labels=false,
},
samples=41,
z filter/.code=\def\pgfmathresult{-1},
]
table {XYZ.csv};
\addplot3[
samples=41,
samples y=10,
domain=-1:1,
domain y=-1:1,
mesh, patch type=line,
x filter/.code=\def\pgfmathresult{-1.2},
]
table {XYZ.csv};
\addplot3[
samples=41,
samples y=10,
mesh, patch type=line,
y filter/.code=\def\pgfmathresult{3.5},
]
table {XYZ.csv};
\addplot3[surf,samples=25]
table {XYZ.csv};
\end{axis}
\end{tikzpicture}
&
\begin{tikzpicture}
\begin{axis}[
domain=-1:1,
domain y=-1:1,
title = Expression (lin),
xmin=-1.3, xmax=1.3,% x scale
ymin=-1.9, ymax=3.9, % y scale
zmin=-1, zmax=3.1, % z scale
]
\newcommand\expr[2]{abs(#1) + 2*abs(#2)}
\addplot3[
contour gnuplot={
% cdata should not be affected by z filter:
output point meta=rawz,
number=10,
labels=false,
},
samples=41,
z filter/.code=\def\pgfmathresult{-1},
]
{\expr{x}{y}};
\addplot3[
samples=41,
samples y=10,
domain=-1:1,
domain y=-1:1,
% we want 1d (!) individually colored mesh segments:
mesh, patch type=line,
x filter/.code=\def\pgfmathresult{-1.2},
]
(y,x,{\expr{y}{x}});
\addplot3[
samples=41,
samples y=10,
% we want 1d (!) individually colored mesh segments:
mesh, patch type=line,
y filter/.code=\def\pgfmathresult{3.5},
]
{\expr{x}{y}};
\addplot3[surf,samples=25]
{\expr{x}{y}};
\end{axis}
\end{tikzpicture}
\\
\begin{tikzpicture}
\begin{axis}[
domain=-1:1,
domain y=-1:1,
title = Table (log),
zmode=log,
xmin=-1.2, xmax=1.3,% x scale
ymin=-1.9, ymax=3.3, % y scale
zmin=-3, zmax=2, % z scale
]
\addplot3[
contour gnuplot={
% cdata should not be affected by z filter:
output point meta=rawz,
number=10,
labels=false,
},
samples=41,
z filter/.code=\def\pgfmathresult{-8},
]
table {XYZ.csv};
\addplot3[
samples=41,
samples y=10,
domain=-1:1,
domain y=-1:1,
% we want 1d (!) individually colored mesh segments:
mesh, patch type=line,
x filter/.code=\def\pgfmathresult{-1.1},
]
table {XYZ.csv};
\addplot3[
samples=41,
samples y=10,
mesh, patch type=line,
y filter/.code=\def\pgfmathresult{3.1},
]
table {XYZ.csv};
\addplot3[surf,samples=25]
table {XYZ.csv};
\end{axis}
\end{tikzpicture}
&
\begin{tikzpicture}
\begin{axis}[
domain=-1:1,
domain y=-1:1,
title = Expression (log),
zmode=log,
xmin=-1.2, xmax=1.3,% x scale
ymin=-1.9, ymax=3.3, % y scale
zmin=-3, zmax=2, % z scale
]
\newcommand\expr[2]{abs(#1) + abs(#2)+.001}
\addplot3[
contour gnuplot={
% cdata should not be affected by z filter:
output point meta=rawz,
number=10,
labels=false,
},
samples=41,
z filter/.code=\def\pgfmathresult{-8},
]
{\expr{x}{y}};
\addplot3[
samples=41,
samples y=10,
domain=-1:1,
domain y=-1:1,
% we want 1d (!) individually colored mesh segments:
mesh, patch type=line,
x filter/.code=\def\pgfmathresult{-1.1},
]
(y,x,{\expr{y}{x}});
\addplot3[
samples=41,
samples y=10,
mesh, patch type=line,
y filter/.code=\def\pgfmathresult{3.1},
]
{\expr{x}{y}};
\addplot3[surf,samples=25,
]
{\expr{x}{y}};
\end{axis}
\end{tikzpicture}
\\
\end{tabular}
\end{document}