我有一个 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
方法的解决方案更好。