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}

関連情報