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}

관련 정보