我想将行限制\pgfplotstabletypeset
为最后 N 行。我可以通过以下方式跳过行:
\pgfplotstabletypeset[skip rows between index={0}{4}]{file.data}
但这只有在我提前知道总行数的情况下才有效。由于数据文件会随着时间的推移而增长,我希望表格仅包含最后的行,比如说 12 行。截断数据文件不是一种选择,因为它也用于所有行都相关的 pgfplot 中。
有没有办法skip rows between index
根据文件的总行数来计算第二个参数?
答案1
这里有一种名为 的新样式print last
,可用于仅打印表格的最后几行。您可以使用参数指定要打印的行数print last
(因此print last=3
将打印表格的最后三行)。如果您不提供选项,则只会打印最后一行。
该样式使用 来工作row predicate
,它允许我们指定为表中的每一行执行的代码块,如果\pgfplotstableuserowfalse
在该代码块中执行,则该行将被忽略。在代码执行期间,总行数可用作\pgfplotstablerows
。
以下是包含该样式的示例:
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{pgfcalendar} % For the date column
\usepackage{filecontents} % To be able to include the data in the .tex file
\begin{filecontents}{testdata.dat}
2011-01-01 5 7.1
2011-02-01 3 8.2
2011-03-01 4 9.1
2011-04-01 2 3.5
2011-05-01 3 9.2
2011-06-01 7 1.1
2011-07-01 7 4.8
2011-08-01 6 2.6
2011-09-01 2 2.7
2011-10-01 5 15.3
2011-11-01 6 4.1
2011-12-01 7 2.2
\end{filecontents}
\begin{document}
%% The interesting bit starts
\pgfkeys{
/pgfplots/table/print last/.style={
row predicate/.code={
% Calculate where to start printing, use `truncatemacro` to get an integer without .0
\pgfmathtruncatemacro\firstprintedrownumber{\pgfplotstablerows-#1}
\ifnum##1<\firstprintedrownumber\relax
\pgfplotstableuserowfalse
\fi
}
},
/pgfplots/table/print last/.default=1
}
\pgfplotstabletypeset[
print last=4,
columns/0/.style={
column type=r,
date type={\monthname\ \year} % Nice date printing
},
columns/2/.style={
dec sep align % Nice number alignment
}
]{testdata.dat}
\end{document}