我有這樣的事情:
\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}