有什么办法可以适应仅在 \pgfplotstabletypeset 中显示输入数据文件的最后 N 行执行\addplot table
命令?
这不起作用:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}
\begin{filecontents}{data.dat}
1 5
2 3
3 6
4 4
5 0
6 1
\end{filecontents}
\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
}
\begin{tikzpicture}
\begin{axis}[x=1cm]
\addplot table {data.dat};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[x=1cm]
\addplot table [print last=4] {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}
两个图都相同:
答案1
这是一个plot last=<n>
可以添加到 的样式\addplot table [<options>]
。它使用create on use
语法创建一个新列,该列检查当前行是否小于n
最后一行的行数,将该检查的值分配给,然后使用过滤器仅保留的meta
值。meta
1
\begin{tikzpicture}
\begin{axis}[x=1cm]
\addplot table {data.dat};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[x=1cm]
\addplot table [plot last=4] {data.dat};
\end{axis}
\end{tikzpicture}
将产生
这种方法的主要优点在于,您无需\pgfplotstablegetrowsof
在绘图前明确调用,也无需指定两次数据文件。主要缺点在于,您无法meta
再使用该条目来绘制误差线或更改散点图中的颜色。
完整代码如下:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\begin{document}
\begin{filecontents}{data.dat}
a b
1 5
2.5 3
3 6
4 4
5 0
6 1
\end{filecontents}
\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,
/pgfplots/table/plot last/.style={
create on use/rows/.style={
create col/expr=\pgfplotstablerow>(\pgfplotstablerows-#1-1)
},
meta=rows,
/pgfplots/x filter/.code=\pgfmathparse{x/meta}
}
}
\begin{tikzpicture}
\begin{axis}[x=1cm]
\addplot table {data.dat};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[x=1cm]
\addplot table [plot last=4] {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
谢谢 Christian,你向我指出了一个可行的解决方案。这是经过编辑和更正的代码:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}
\begin{filecontents}{data.dat}
1 5
2 3
3 6
4 4
5 0
6 1
\end{filecontents}
\begin{tikzpicture}
\begin{axis}[x=1cm,y=1cm]
\addplot table {data.dat};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\pgfplotstablegetrowsof{data.dat}
\pgfmathsetmacro\yfin{\pgfmathresult - 4}
\pgfmathsetmacro\yini{0}
\begin{axis}[x=1cm,y=1cm,skip coords between index={\yini}{\yfin}]
\addplot table {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}