[Tex/LaTex] Date plot using pgfplots with odd tick label

dateplotlabelspgfplotsticks

How do I make the time label in the following image appear as "10:00" (i.e. 10 o'clock) rather than the unexpected and unwelcome "09:60"?

enter image description here

Here's the code that I am using:

\documentclass{beamer}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot} 


\begin{document} 

\frame{
\begin{tikzpicture}
\begin{axis}[
mark =none,
xmin=2009-08-18 08:30,
xmax=2009-08-18 10:29,
ymin=0, 
ymax=189,
grid=both,
axis x line=bottom,
axis y line=left,
date coordinates in=x,
minor x tick num=5,
minor y tick num=4,
xtick={2009-08-18 09:00,2009-08-18 10:00},
ytick={0,50,100,150},
xticklabel= \hour:\minute,
]
\addplot [thick,blue]coordinates {
(2009-08-18 08:30, 000)
(2009-08-18 09:00, 060)
(2009-08-18 09:20, 060)
(2009-08-18 10:00, 100)
(2009-08-18 10:10, 060)
} node [below] {Train A};

\end{axis}
\end{tikzpicture}
}

\end{document}

Supplementary question:

In the image above, why don't the minor tick lines appear before "09:00" but only after?

Best Answer

This is a known bug that's fixed in the development version of PGFplots. You can include the bugfix without upgrading the package by defining the patched function in your preamble.

I'm not sure what's going on with the grid lines, you may want to file a bug report about that. You can work around it by using the following settings:

minor x tick num=11,
xtick={2009-08-18 08:00,2009-08-18 10:00},
extra x ticks=2009-08-18 09:00

Here's the complete code:

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot} 

\makeatletter
\def\pgfplotslibdateplot@number@to@julian@and@time#1.#2\julianto#3\hourto#4\minuteto#5{%
    #3=#1
    \pgf@xa=0.#2pt
    \multiply\pgf@xa by24
    \afterassignment\pgfplots@gobble@until@relax
    \c@pgf@countb=\the\pgf@xa\relax
    \edef#4{\the\c@pgf@countb}%
    \advance\pgf@xa by-#4pt
    \multiply\pgf@xa by60
    \afterassignment\pgfplots@gobble@until@relax
    \c@pgf@countb=\the\pgf@xa\relax
    % round minutes (we may lose precision here)
    \advance\pgf@xa by-\the\c@pgf@countb pt
    \ifdim\pgf@xa>0.5pt 
        \advance\c@pgf@countb by1
        \ifnum\c@pgf@countb=60
            \c@pgf@countb=#4 %
            \advance\c@pgf@countb by1
            \edef#4{\the\c@pgf@countb}%
            \c@pgf@countb=0
        \fi
    \fi
    \edef#5{\the\c@pgf@countb}%
}
\makeatother


\begin{document} 

\frame{
\begin{tikzpicture}
\begin{axis}[
mark =none,
date ZERO=2009-08-18 08:30,
xmin=2009-08-18 08:30,
xmax=2009-08-18 10:29,
ymin=0, 
ymax=189,
grid=both,
axis x line=bottom,
axis y line=left,
date coordinates in=x,
minor x tick num=11,
minor y tick num=4,
xtick={2009-08-18 08:00,2009-08-18 10:00},
extra x ticks=2009-08-18 09:00,
ytick={0,50,100,150},
xticklabel= \hour:\minute,
]
\addplot [thick,blue]coordinates {
(2009-08-18 08:30, 000)
(2009-08-18 09:00, 060)
(2009-08-18 09:20, 060)
(2009-08-18 10:00, 100)
(2009-08-18 10:10, 060)
} node [below] {Train A};

\end{axis}
\end{tikzpicture}
}

\end{document}

pgfplots dateplot