我创建了一个自定义的 pgfplot 样式,它允许我创建线图,其中 x 轴是时间hh:mm
格式的线图。数据加载自.csv文件。
x 轴上的自动刻度放置很好,但我想确保第一个和最后一个数据点都有刻度。x 轴范围和数据点数量各不相同,所以我宁愿避免手动放置刻度。
有没有办法强制在第一个和最后一个数据点上打勾,同时自动放置所有勾号?
代码
\documentclass{article}
\usepackage{pgfplots}
\def\removeleadingzeros#1{\if0#1 \expandafter\else#1\fi}
\def\transformtime#1:#2:#3!{
\pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
\pgfmathparse{\removeleadingzeros#1*3600+\removeleadingzeros#2*60+\removeleadingzeros#3}
\pgfkeys{/pgf/fpu=false}
}
\pgfplotsset{
timeplot/.style={
x coord trafo/.code={\expandafter\transformtime##1!},
x coord inv trafo/.code={%
\pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
\pgfmathsetmacro\hours{floor(##1/3600)}
\pgfmathsetmacro\minutes{floor((##1-\hours*3600)/60)}
\def\pgfmathresult{\pgfmathparse{mod(\hours,60)<10?"0":{},int(mod(\hours,60))}\pgfmathresult:\pgfmathparse{mod(\minutes,60)<10?"0":{},int(mod(\minutes,60))}\pgfmathresult}
\pgfkeys{/pgf/fpu=false}
},
scaled x ticks=false,
xticklabel=\tick,
ymin=0,
grid=major,
width=\linewidth
}
}
\begin{filecontents*}{juli.csv}
12:22:00,181
12:37:00,180
12:52:00,176
13:07:00,171
13:22:00,164
13:37:00,156
13:52:00,146
14:07:00,134
14:22:00,121
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[timeplot]
\addplot [mark=none] table [col sep=comma] {juli.csv};
\end{axis}
\end{tikzpicture}
\end{document}