0

I have a time series that I obtain from a numerical simulation with an integration time step of 1min. This time series spans several months and I want to use dates in the x-axis. Once the integration is over I add an epoch time corresponding with the first day to the time numpy array created as

tt = np.arange(0.0, number_of_days, minute)

I only pick up data points every 10 mins (tt[::10]). I convert this array to the date format '%Y-%m-%d %H:%M:%S' via

dtime = np.empty(len(tt[::10]), dtype="S19")
for ind, t in enumerate(tt[::10]):
   daytime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(t))
   dtime[ind] = datetime.strptime(daytime, '%Y-%m-%d %H:%M:%S')

print(dtime) results in:

[b'2020-01-22 00:00:00' b'2020-01-22 00:10:00' b'2020-01-22 00:20:00' ...
 b'2020-06-29 23:30:00' b'2020-06-29 23:40:00' b'2020-06-29 23:50:00']

I format the xticks as:

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.WeekdayLocator())
plt.gca().xaxis.set_minor_locator(mdates.DayLocator())

I plot this data with:

plt.plot_date(dtime, Y)
plt.gcf().autofmt_xdate()

I get the same result if I only use plt.plot. I get no xticks with the dates unfortunately. It seems dates are not properly formatted in datetime format so that matplotlib understands it. I suspect the problem has to do with dtime, which I think should not be of string type. The result is

enter image description here

I would like to plot this time series with this graph, which has one data point per day.

enter image description here

I have a second related question here: how to set the major ticks at biweekly intervals?

When I plot both datasets together I get this:

enter image description here

Update: Based on the solution proposed by Andrea, I can now plot both datasets in the same graph as below

enter image description here

3
  • use plt.scatter? Commented Jun 30, 2020 at 21:10
  • The problem is with formatting the xtics. Using scatter won't help it. Commented Jun 30, 2020 at 21:14
  • Thanks for pointing out. I just corrected it. Commented Jun 30, 2020 at 21:25

1 Answer 1

1

Why do not you use pd.date_range to generate the dtime array?

dtime = pd.date_range(start = '2020-01-22', end = '2020-06-29', freq = '10min')

In this way, the dtime is:

DatetimeIndex(['2020-01-22 00:00:00', '2020-01-22 00:10:00',
               '2020-01-22 00:20:00', '2020-01-22 00:30:00',
               '2020-01-22 00:40:00', '2020-01-22 00:50:00',
               '2020-01-22 01:00:00', '2020-01-22 01:10:00',
               '2020-01-22 01:20:00', '2020-01-22 01:30:00',
               ...
               '2020-06-28 22:30:00', '2020-06-28 22:40:00',
               '2020-06-28 22:50:00', '2020-06-28 23:00:00',
               '2020-06-28 23:10:00', '2020-06-28 23:20:00',
               '2020-06-28 23:30:00', '2020-06-28 23:40:00',
               '2020-06-28 23:50:00', '2020-06-29 00:00:00'],
              dtype='datetime64[ns]', length=22897, freq='10T')

With this code:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import numpy as np

dtime = pd.date_range(start = '2020-01-22', end = '2020-06-29', freq = '10min')
X = np.linspace(-10, 10, len(dtime))
Y = np.exp(X) / (np.exp(X) + 1)

plt.plot(dtime, Y)

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval = 7))
plt.gca().xaxis.set_minor_locator(mdates.DayLocator(interval = 1))
plt.setp(plt.gca().xaxis.get_majorticklabels(), rotation = 45 )
plt.gca().set_xlim(dtime[0], dtime[-1])

plt.show()

I get this plot:

enter image description here

Since I do not have access to your Y data, I generated a sigmoid function in order to make the plot; replace it with your data.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.