pgfplotstable:来自 \pgfplotstableread 的数据存在问题

pgfplotstable:来自 \pgfplotstableread 的数据存在问题

我想将数据存储在源文件内,而无需创建额外的文件。但是,从外部文件(此处通过 提供)加载数据与使用 将其存储在宏中pgfplot之间似乎存在差异。filecontentspgfplotstableread

下面的代码在data.dat被 s 加载时运行addplot,当第二个文件名(参见源代码中的注释)被表宏 替换时会导致错误\data

\documentclass{article} 
\usepackage{siunitx}
\usepackage{pgfplots}\pgfplotsset{compat=1.14, small}
\usepackage{pgfplotstable}

\begin{filecontents*}{data.dat}
x   error   y   label
-0.3294 0.0012  -1  \num{-0.329(2)}
-0.3296 0.0012  -2  -0.330(2)
\end{filecontents*}

\pgfplotstableread{
x   error   y   label
-0.3294 0.0012  -1  \num{-0.329(2)}
-0.3296 0.0012  -2  -0.330(2)
}{\data}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xmax=-0.293,
    visualization depends on={value \thisrow{label} \as \labela},
    nodes near coords align={horizontal}]
\addplot+[only marks, error bars/.cd, x dir=both, x explicit] 
    table[x=x,y=y,x error=error] {\data};
\addplot [nodes near coords={\labela}, only marks, mark=none] 
    table[x expr=\pgfkeysvalueof{/pgfplots/xmax}, y=y] {data.dat};  % replacing data.dat with \data results in errors
\end{axis}
\end{tikzpicture}
\end{document}

有没有办法在两种情况下实现相同的结果?任何帮助都值得感激。

答案1

在 @Stefan Pinnow 提交了错误之后,我发现\pgfplotstableread矩阵图也会出现问题。因此,问题不仅仅在于visualization depends on

以下是一个例子:

\documentclass{article} 
\usepackage{pgfplots}
    \pgfplotsset{compat=1.14, small, scale only axis}

\begin{filecontents*}{data.dat}
x   y   Val
1   1   1
2   1   0
1   2   0
2   2   1
\end{filecontents*}

\pgfplotstableread{
x   y   Val
1   1   1
2   1   0
1   2   0
2   2   1
}{\data}

\begin{document}

\begin{tikzpicture} 
\begin{axis}[width=2cm, height=2cm, enlargelimits=false, title=filecontents]
    \addplot[matrix plot, mesh/cols=2, point meta=explicit]
        table[meta=Val] {data.dat};
\end{axis}

\begin{axis}[xshift=4cm, width=2cm, height=2cm, enlargelimits=false, title=pgfplotstableread]
    \addplot[matrix plot, mesh/cols=2, point meta=explicit]
        table[meta=Val] {\data};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容