如何对使用 pgfplots 绘图的表格进行排序?

如何对使用 pgfplots 绘图的表格进行排序?

是否可以在 pgfplot 中包含的点处对表格进行排序。在下面的示例中,点 x=3 和 x=4 已按顺序进行绘图。我更希望找到“就地”解决方案,而不是使用 pgfplotstable 的复杂解决方案。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}
        \addplot table[x=x, y=y] { %something like table[sort index=#1]?)
            x   y
            1   11
            2   14
            4   26
            3   39
        };
    \end{axis}
    \end{tikzpicture}
\end{document}

答案1

如果您不介意将gnuplot其用作 PGFPlots 的后端,则可以使用smooth unique您提到的选项。这实际上是一种很好的方法,因为它的gnuplot排序速度比 PGFPlotstable 快得多。

\documentclass{standalone}
\usepackage{pgfplots}

\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
x   y
1   11
2   14
4   26
3   39
\end{filecontents}


\begin{document}
    \begin{tikzpicture}
    \begin{axis}
        \addplot gnuplot [raw gnuplot] {plot 'testdata.dat' using 1:2 smooth unique;};
    \end{axis}
    \end{tikzpicture}
\end{document}

否则,我认为你不会绕过预处理步骤,无论是使用 pgfplotstable 还是其他工具。正如 Christian Feuersänger 所说这里,该sort选项仅适用于排版表格,而不适用于绘图。解决方案不会很“复杂”,但是,只需一行代码即可对表格进行排序并将结果存储在新宏中:

\documentclass{standalone}
\usepackage{pgfplots, pgfplotstable}

\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
x   y
1   11
2   14
4   26
3   39
\end{filecontents}

\pgfplotstablesort{\sorted}{testdata.dat}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}
        \addplot table {\sorted};
    \end{axis}
    \end{tikzpicture}
\end{document}

相关内容