pgfplots 在绘图之前对输入值进行排序

pgfplots 在绘图之前对输入值进行排序

我有类似的东西:

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots,pgfplotstable}

\usetikzlibrary{pgfplots.dateplot}

\pgfplotsset{compat=newest} % Allows to place the legend below plot

\pgfplotsset{general plot/.style={
        date coordinates in=x,
        date ZERO=2019-12-31,
        width=37cm,
        height=20cm,
        xlabel=x,
        ylabel=y,
        table/create on use/d/.style={create col/expr={\pgfmathaccuma + \thisrow{y}}},
    }
}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[general plot]
        \addplot
        table[x=Date, y=d, col sep=space] {data.csv};
        \addlegendentry{legend}
    \end{axis}
\end{tikzpicture}

\end{document}

我的data.csv文件如下所示:

Date        y
2020-03-20  1
2020-03-19  2
2020-03-18  3
2020-03-17  4
2020-03-16  5
2020-03-15  6
2020-03-14  7
2020-03-13  8
2020-03-12  9
2020-03-11  10

我得到了一条向下的曲线(当然,这是因为在给定的表上创建了新列)。我现在想要的是,首先对表中的值进行排序(以日期为键),然后创建新列。

有人知道该怎么做吗?

答案1

您可以使用包\pgfplotstablesort中的宏pgfplotstable

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots,pgfplotstable}

\usetikzlibrary{pgfplots.dateplot}

\pgfplotsset{compat=newest} % Allows to place the legend below plot

\pgfplotsset{general plot/.style={
        date coordinates in=x,
        date ZERO=2019-12-31,
        width=37cm,
        height=20cm,
        xlabel=x,
        ylabel=y,
        table/create on use/d/.style={create col/expr={\pgfmathaccuma + \thisrow{y}}},
    }
}

\begin{document}

\begin{tikzpicture}
    \pgfplotstableread{data.csv}{\loadedtable}%
    \pgfplotstablesort[sort key = Date, sort cmp = date <]{\sortedtable}{\loadedtable}
    \begin{axis}[general plot]
        \addplot
        table[x=Date, y=d, col sep=space] from \sortedtable;
        \addlegendentry{legend}
    \end{axis}
\end{tikzpicture}

\end{document}

相关内容