从文件读取“xticklabels”:逗号不分割

从文件读取“xticklabels”:逗号不分割

以下是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}中的数据作为列表。\mydataxticklabelsxticklabels

相关问题:

\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}

相关内容