以下是xticklabels
从文件读取的图的 MWE。它可以工作,但是从文件中提取的字符串内的逗号不会将字符串拆分为多个部分。我们如何删除提取的字符串周围的组?
\documentclass{article}
\usepackage{pgfplots, datatool, filecontents}
\begin{filecontents}{myfile.tex}
xticklabels:-5,-4,-3,-2,-1,0,1,2,3,4,5
\end{filecontents}
\DTLsetseparator{:}
\begin{document}
\DTLloaddb[noheader, keys={key,value}]{mydata}{mydata.extra}
\begin{tikzpicture}
\begin{axis}[
xtick = {-5,-4,-3,-2,-1,0,1,2,3,4,5},
xticklabels = \DTLfetch{mydata}{key}{xticklabels}{value},
]
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\end{document}
上面的图像是我们得到的,下面的图像是我期望的。
答案1
pgfplots
及其配套软件包pgfplotstable
已经具备从文件读取数据的能力。(我猜想/认为datatool
与 存在一些兼容性问题pgfplots
。)
在以下示例中,
- 数据按行写入
mydata.tex
,并以逗号分隔。 - 数据存储在命令中
\mydata
。- 由于
pgfplots
按列读取数据,\pgfplotstabletranspose
因此用于转置数据矩阵。 - 默认情况下,
\pgfplotstabletranspose
创建新的列名。选项colnames from={xticklabels}, input colnames to={xticklabels}
可将其用作xticklabels
列名。
- 由于
- 选项使用表、列
xticklabels from table={\mydata}{xticklabels}
中的数据作为列表。\mydata
xticklabels
xticklabels
相关问题:
\begin{filecontents}[force, noheader]{mydata.tex}
xticklabels,-5,-4,-3,-2,-1,0,1,2,3,4,5
\end{filecontents}
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}
\pgfplotstableset{col sep=comma}
\begin{document}
\begin{tikzpicture}
% transpose data table
\pgfplotstabletranspose[
colnames from={xticklabels},
input colnames to={xticklabels}
]{\mydata}{mydata.tex}
\begin{axis}[
xtick = {-5,-4,-3,-2,-1,0,1,2,3,4,5},
xticklabels from table={\mydata}{xticklabels},
]
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\end{document}
作为回应此评论
如果想要语法xticklabels=<macro storing a list>
,请参阅以下补丁
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\makeatletter
% redefine pgfplots key "xticklabels", expand its value once before parsing
\pgfkeys{
/pgfplots/xticklabels/.code={%
\expandafter\pgfplotslistnew\expandafter\pgfplots@xticklabels\expandafter{#1}%
\let\pgfplots@xticklabel=\pgfplots@user@ticklabel@list@x
}
}
\makeatother
\newcommand\xticklabels{-5,-4,-3,-2,-1,0,1,2,3,4,5}
\begin{tikzpicture}
\begin{axis}[
xtick = {-5,-4,-3,-2,-1,0,1,2,3,4,5},
xticklabels=\xticklabels,
]
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\end{document}