[Matplotlib-users] Date/Time not displaying as expected.
Eric Firing
efiring at hawaii.edu
Sun Aug 18 22:59:44 EDT 2019
Mike,
Your plot tick labels are displaying month, day, and hour (the first
tick is at the start of August 16, the next is 3 hours later, etc.).
This is the default format for an axis of the length in your example.
The idea behind the scheme is to provide no more than 3 date time
numbers per tick label so as to keep the label from being too long.
You can override the default in two ways: by overriding one or more of
the formats used by the rather complex AutoDateFormatter (which is
designed to work with the default AutoDateLocator), or by specifying the
use of your own DateFormatter in which you directly provide the
strftime-style format string to use.
Method 1:
you can change the defaults used by AutoDateFormatter by specifying them
in a matplotlibrc file, or by setting them in the rcParams dictionary.
In the former case the change must be made before matplotlib is
imported; in the latter, it must be before the plot is made. Here are
commented-out values from the matplotlibrc template:
#date.autoformatter.year : %Y
#date.autoformatter.month : %Y-%m
#date.autoformatter.day : %Y-%m-%d
#date.autoformatter.hour : %m-%d %H
#date.autoformatter.minute : %d %H:%M
#date.autoformatter.second : %H:%M:%S
#date.autoformatter.microsecond : %M:%S.%f
In the case of your example the ticks are at intervals of 3 hours, so it
is the '.hour' entry that would have to be changed. For example, in
your script:
plt.rcParams['date.autoformatter.hour'] = '%m-%d %H:%M'
If you are plotting with a variety of axis spans, so that ticks are
placed at day multiples, or minute multiples, for example, then you
would have to use this method to change those corresponding defaults.
Method 2:
In your script you could add, for example:
import matplotlib.dates as mdates
ax = plt.gca()
formatter = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(ax.xaxis.set_major_formatter(formatter))
This way you will have the same standard format regardless of the time
range spanned by your axis.
Also, instead of specifying the tick label rotation yourself, you might
want to use
plt.gcf().autofmt_xdate()
which will place the end of the rotated string just below the tick.
Eric
On 2019/08/18 1:07 PM, Mike Sacauskis wrote:
> Hi
>
> I'm new to Matplotlib, I'm going to be plotting some temperature data
> over time and wrote a test program to see with Matplotlab can do for
> me. When I plot the the date the date time does not display as I would
> expect, the date is output but the time is some type of counter not the
> time of day as expected. What am I doing wrong? I've attached the
> code, data and the resulting image. Any help would be greatly
> appreciated.
>
> Mike
>
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org
> https://mail.python.org/mailman/listinfo/matplotlib-users
>
More information about the Matplotlib-users
mailing list