我的示例如下:
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\begin{filecontents*}{data.csv}
(10-18-2018 16:50:27.871,0)
(10-18-2018 16:50:27.888,8)
(10-18-2018 16:50:27.904,25)
(10-18-2018 16:50:27.921,41)
(10-18-2018 16:50:27.938,59)
(10-18-2018 16:50:27.954,75)
(10-18-2018 16:50:27.971,92)
(10-18-2018 16:50:27.988,45)
(10-18-2018 16:50:28.005,62)
(10-18-2018 16:50:28.022,79)
(10-18-2018 16:50:28.039,96)
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
date coordinates in=x,
xticklabel style= {rotate=60,anchor=north east},
xlabel=X,
ylabel=Y
]
\addplot table[ignore chars={(,)},col sep=comma] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
明显地:
- x 标签不正确,我希望它可以自动匹配数据范围。我不希望添加 min-x/max-x 语句。
- 数据点没有分布到整个图表,而是全部位于中心。听起来像微秒没有被解析!
答案1
Ulrike Fischer 介绍了这个非常好的答案一个通用的解析器。(当然,如果你想同时改变年份和毫秒,你会遇到,dimension too large errors
但使用 Ulrike 的优秀解析器,你可以专注于你关心的数据。)(我也强调她使用了这个术语\marmottimeparseaux
,所以这是我没有因为提高土拨鼠意识而受到指责的案例之一。;-)
\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
%\usepgfplotslibrary{dateplot}
\pgfplotsset{compat=1.16}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
(10-18-2018 16:50:27.871,0)
(10-18-2018 16:50:27.888,8)
(10-18-2018 16:50:27.904,25)
(10-18-2018 16:50:27.921,41)
(10-18-2018 16:50:27.938,59)
(10-18-2018 16:50:27.954,75)
(10-18-2018 16:50:27.971,92)
(10-18-2018 16:50:27.988,45)
(10-18-2018 16:50:28.005,62)
(10-18-2018 16:50:28.022,79)
(10-18-2018 16:50:28.039,96)
\end{filecontents*}
\usepackage{xfp}
% from https://tex.stackexchange.com/a/445564/121799
\def\marmottimeparseaux#1-#2-#3 #4:#5:#6xxx{\fpeval{#5* 60 + #6}}
\ExplSyntaxOn
\cs_new:Nn \marmot_timeparse:n { \marmottimeparseaux #1xxx }
\newcommand\TimeParse[1]{\exp_args:Nf\marmot_timeparse:n {#1}}
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table [,ignore chars={(,)},col sep=comma,
x expr=\TimeParse{\thisrowno{0}},y expr=\thisrowno{1}] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}