pgfplot 做出错误预测

pgfplot 做出错误预测

提问后pgfplot 对表格数据进行错误投影,我制作了一个新的 MWE(见下文)和测试数据,我认为最好开始一个新线程。我想以线性和对数模式显示带有投影的相同测试表面,来自表达式和表格。表达式为 \newcommand\expr[2]{abs(#1) + abs(#2)+.001},相应的表格数据在 MWE 中给出。结果如下:

enter image description here

看起来这两个案件的处理方式不同。在我看来

  1. 线性表视图仅将 X 投影显示为垂直线;它应该是像 Y 投影一样的 V 形。
  2. 表格视图相对于表达式视图旋转(我看到示例程序使用了它(y,x,{\expr{y}{x}});,但我找不到“表格”的类似方法。我认为这两个问题是相关的。)

  3. 虽然我使用了“样本”,但表格视图中没有插入任何中间值。

  4. 尽管表面本身进行了旋转,但表格情况下的 Z 投影似乎与表达式情况下的 Z 投影相同。

  5. 表格线性 Z 投影是彩色的,但表面没有。

  6. 表格对数 Z 投影与线性投影的情况相同,但这次没有颜色。

  7. 表格对数 Z 投影轮廓线是按线性计算的,而不是按对数计算的,尽管投影是按对数计算的。

  8. 对数视图表达式也存在同样的问题: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}

相关内容