The issue has already been considered in the form of comments. However, I was still struggling with time zones. To understand this, I tried all the combinations. I think that you have two main approaches, depending on whether your datetime objects are already in the right time zone or are in another time zone, I tried to describe them below. Maybe I still missed / mixed something.
Timestamps (datetime objects): in UTC; Desired display: in a specific time zone
- Set xaxis_date () to the desired time zone of the display (by default for
rcParam['timezone'] , which was UTC for me)
Timestamps (datetime objects): in a specific time zone Desired display: in another specific time zone
- Feed your objects to the datetime function of the graph function with the appropriate time zone (
tzinfo= ) - Set rcParams ['Time Zone "] to the desired time zone.
- Use the dateformatter format (even if you are satisfied with the format, the formatter is notified of the time zone )
If you use plot_date (), you can also pass the tz keyword, but this is not possible for a scatter plot.
When your source data contains unix timestamps, make sure that you choose wisely from datetime.datetime.utcfromtimestamp() and without utc: fromtimestamp() if you intend to use the matplotlib timezone features.
This is an experiment that I did (in this case, the scatter ()), it is a bit complicated, perhaps, but just written here for all who care. Note the time at which the first points appear (the x axis does not start at the same time for each subtitle): 
Source:
import time,datetime,matplotlib import matplotlib.pyplot as plt import numpy as np import matplotlib.dates as mdates from dateutil import tz
source share