我的 pgfplot 数据的单个文件

我的 pgfplot 数据的单个文件

我有一个 tikzpicture,上面有许多不同大小的线条。我决定通过创建一个包含所有数据的 pgftable 来将数据与绘图逻辑分开,然后选择要绘制的数据行。这很好用,可以清理 tikzpicture 源,但它迫使我用nan值填充我的数据,这会增加文件大小,从而增加表格加载时间和编译时间。我当然可以将数据分成多个文件,但我更喜欢管理单个数据源。

如果不利用 nan 值填充我的数据,可以做到这一点吗?

平均能量损失

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

% My file is much bigger than this so padding my data
% with nans becomes untenable. 
\usepackage{filecontents}
\begin{filecontents}{data.txt}
  X1 1 2 3 4 5 6 7 8 9 10
  Y1 1 2 3 4 5 6 7 8 9 10
  X2 1 2 nan nan nan nan nan nan nan nan
  Y2 1 1 nan nan nan nan nan nan nan nan
\end{filecontents}

\begin{document}

  \pgfplotstabletranspose[input colnames to={X1}, colnames from={X1}]{\loadedtable}{data.txt}

  \begin{tikzpicture}
    \begin{axis}
      \addplot table [x=X1, y=Y1] {\loadedtable};
      \addplot table [x=X2, y=Y2] {\loadedtable};
    \end{axis}
  \end{tikzpicture}

\end{document}

答案1

只需使用适当的列分隔符(例如逗号)。然后,只需将逗号放在彼此旁边即可获得空单元格。您只需pgfplotstable通过选项告知您使用的列分隔符col sep

使用该方法你的 MWE 将如下所示:

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

% My file is much bigger than this so padding my data
% with nans becomes untenable. 
\usepackage{filecontents}
\begin{filecontents}{data.txt}
  X1,1,2,3,4,5,6,7,8,9,10
  Y1,1,2,3,4,5,6,7,8,9,10
  X2,1,2,,,,,,,,
  Y2,1,1,,,,,,,,
\end{filecontents}

\begin{document}
  \pgfplotstableset{col sep=comma}
  \pgfplotstabletranspose[input colnames to={X1}, colnames from={X1}]{\loadedtable}{data.txt}

  \begin{tikzpicture}
    \begin{axis}
      \addplot table [x=X1, y=Y1] {\loadedtable};
      \addplot table [x=X2, y=Y2] {\loadedtable};
    \end{axis}
  \end{tikzpicture}

\end{document}

它并不完美,因为您仍然需要放置所有逗号,但它肯定比该nan方法的解决方案更好。

相关内容