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)};
除非你准备好进行大规模黑客攻击。