Ich habe so etwas:
\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}
Meine data.csv
Datei sieht so aus:
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
Ich erhalte eine Kurve, die nach unten verläuft (natürlich, da die neue Spalte in der angegebenen Tabelle erstellt wird). Was ich jetzt möchte, ist, zuerst die Werte in der Tabelle zu sortieren (mit dem Datum als Schlüssel) und anschließend die neue Spalte zu erstellen.
Weiß da draußen jemand, wie das geht?
Antwort1
\pgfplotstablesort
Sie können das Makro aus dem Paket verwenden 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}