我正在尝试调整设置以在这个问题. 名称位于不同文件中的情况。主要动机是让多个图具有相同的名称,并且能够在不更改数据文件的情况下更改它们。
我尝试使用该方法从中添加一列这个问题并生成以下代码。我收到以下错误:
! Missing $ inserted.
<inserted text>
$
我无法解释。该怎么做?
\begin{tikzpicture}
\pgfplotstableset{
create on use/names/.style={
create col/copy column from table={names.dat}{names}
}
}
\begin{axis}[
visualization depends on={value \thisrow{names} \as \labela},
nodes near coords={\labela},
]
\addplot[scatter,only marks] table [x expr=\thisrowno{0},y expr=\thisrowno{1}] {data.dat};
\end{axis}
\end{tikzpicture}
数据.dat:
1 1
2 4
3 7
名称.dat:
Xyzzy
Plugh
Sheng
答案1
不幸的是,这不能直接起作用,因为create on use
不能很好地发挥\thisrow{<name>}
功能。我认为最好的办法是:
- 将表读
data.dat
入临时表宏。 - 向表中添加标签列。
- 使用将修改后的表写入临时文件
\pgfplotstablesave
。
(当然,这些步骤可以包含在一个方便的宏中)
此后,您可以names
按照您尝试的方式访问该列:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots,pgfplotstable, filecontents}
\begin{filecontents*}{data.dat}
1 1
2 4
3 7
\end{filecontents*}
\begin{filecontents*}{names.dat}
labels
Xyzzy
Plugh
Sheng
\end{filecontents*}
\pgfplotstableread{data.dat}\datatable
\pgfplotstablecreatecol[outfile=temptable,create col/copy column from table={names.dat}{labels}]{names}\datatable
\pgfplotstablesave{\datatable}{temptable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
visualization depends on=value\thisrow{names}\as\labela,
nodes near coords=\labela,
]
\addplot[scatter,only marks] table [x expr=\thisrowno{0},y expr=\thisrowno{1}] {temptable};
\end{axis}
\end{tikzpicture}
\end{document}