删除 \addplot 表命令中的行

删除 \addplot 表命令中的行

有什么办法可以适应仅在 \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值。meta1

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

在此处输入图片描述

相关内容