调用协调器创建补丁时出现错误

调用协调器创建补丁时出现错误

pgfplots我正在尝试通过表格数据构建补丁。在尝试这样做时,我还使用了\coordinate命令。

最小工作示例:

\documentclass{standalone}

\usepackage{currfile}
\usepackage{filecontents}
\usepackage{pgfplots}

\begin{filecontents}{external_data.txt}
    col1 col2
    1    5
    2    6
    3    7
    4    8
\end{filecontents}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
        [   
            xlabel=$x$,
            ylabel=$y$,
            zmin=0,
            zmax=8,
            ztick={0,8},
            z label style={rotate=90},
            zlabel=$z$,
            view={200}{20}
        ]
            \addplot3[patch,mesh,patch type=triangle]   coordinates {(0,0,0) (-1/sqrt(3),-1,0) (1/sqrt(3),-1,0)}; % Reference xy plane.

            \pgfplotstablegetelem{3}{col2}\of{\currfiledir external_data.txt}
            \edef\triangleCoordAz{\pgfplotsretval}
            \coordinate (triangleCoordA) at (axis cs:0,0,\triangleCoordAz);
            \fill[red] (triangleCoordA) circle (1pt); % THIS WORKS FINE WITH THE COORDINATE!

            \addplot3[patch,patch type=triangle] coordinates {(triangleCoordA) ({-1/sqrt(3)},-1,1) ({1/sqrt(3)},-1,1)}; % GIVES AN ERROR!
        \end{axis}
    \end{tikzpicture}
\end{document}

用该命令在坐标处绘制一个红色圆圈\fill[red] (triangleCoordA) circle (1pt);效果很好,所以显然坐标的定义没有问题。然而,\addplot3不幸的是,使用最后一个命令时,我得到了错误

! Package PGF Math Error: Unknown function `triangleCoordA' (in 'triangleCoordA
) ({-1/sqrt(3)}').

See the PGF Math package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.37 ...dA) ({-1/sqrt(3)},-1,1) ({1/sqrt(3)},-1,1)};

This error message was generated by an \errmessage
command, so I can't give any explicit help.
Pretend that you're Hercule Poirot: Examine all clues,
and deduce the truth by order and method.

我似乎无法在 PGFplots 手册中找到使用预定义坐标构建补丁的示例。

我究竟做错了什么?

答案1

当您说 时addplot3[patch,patch type=triangle] coordinates...pgfplots需要表单的实际坐标值(x,y,z)。但是行

\coordinate (triangleCoordA) at (axis cs:0,0,\triangleCoordAz);

定义坐标为 的点的名称(0,0,\triangleCoordAz)

因此,指令

\addplot3[patch,patch type=triangle] coordinates {(triangleCoordA)...};

提供坐标的名称而不是实际(x,y,z)值。因此它不起作用。

因此,您必须使用实际坐标(而不是点的名称)作为

\addplot3[patch,patch type=triangle] coordinates {(0,0,\triangleCoordAz) ({-1/sqrt(3)},-1,1) ({1/sqrt(3)},-1,1)};

除非你准备好进行大规模黑客攻击。

相关内容