Dates in the xaxis for a matplotlib plot with imshow Dates in the xaxis for a matplotlib plot with imshow python python

Dates in the xaxis for a matplotlib plot with imshow


I have put together some example code which should help you with your problem.

The code first generates some randomised data using numpy.random. It then calculates your x-limits and y-limits where the x-limits will be based off of two unix timestamps given in your question and the y-limits are just generic numbers.

The code then plots the randomised data and uses pyplot methods to convert the x-axis formatting to nicely represented strings (rather than unix timestamps or array numbers).

The code is well commented and should explain everything you need, if not please comment and ask for clarification.

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesimport datetime as dt# Generate some random data for imshowN = 10arr = np.random.random((N, N))# Create your x-limits. Using two of your unix timestamps you first# create a list of datetime.datetime objects using map.x_lims = list(map(dt.datetime.fromtimestamp, [982376726, 982377321]))# You can then convert these datetime.datetime objects to the correct# format for matplotlib to work with.x_lims = mdates.date2num(x_lims)# Set some generic y-limits.y_lims = [0, 100]fig, ax = plt.subplots()# Using ax.imshow we set two keyword arguments. The first is extent.# We give extent the values from x_lims and y_lims above.# We also set the aspect to "auto" which should set the plot up nicely.ax.imshow(arr, extent = [x_lims[0], x_lims[1],  y_lims[0], y_lims[1]],           aspect='auto')# We tell Matplotlib that the x-axis is filled with datetime data, # this converts it from a float (which is the output of date2num) # into a nice datetime string.ax.xaxis_date()# We can use a DateFormatter to choose how this datetime string will look.# I have chosen HH:MM:SS though you could add DD/MM/YY if you had data# over different days.date_format = mdates.DateFormatter('%H:%M:%S')ax.xaxis.set_major_formatter(date_format)# This simply sets the x-axis data to diagonal so it fits better.fig.autofmt_xdate()plt.show()

Example plot