2

The time on the x-axis must be represented with a time interval of 3 seconds but the increment of time in my data is 2 seconds. So, I tried to do that as demonstrated in the code, but I’m getting the time demonstrated until 09:56:09 though the time goes till 09:56:22.

Note that, the time should be start from 09:56:00

How can be the time on the x-axis completely demonstrated?

Code:

import matplotlib.pyplot as plt
import time
from datetime import datetime, timedelta
import numpy as np
import matplotlib.dates as mdates

SO=[100,300,600,800,850,310,560,790,500,810,790,490];the_date_0=['01-02-2018 09:56:00.0000','01-02-2018 09:56:02.0000',
                                                               '01-02-2018 09:56:04.0000','01-02-2018 09:56:06.0000',
                                                               '01-02-2018 09:56:08.0000','01-02-2018 09:56:10.0000',
                                                               '01-02-2018 09:56:12.0000','01-02-2018 09:56:14.0000',
                                                               '01-02-2018 09:56:16.0000','01-02-2018 09:56:18.0000',
                                                               '01-02-2018 09:56:20.0000','01-02-2018 09:56:22.0000']

the_date=[]
Date_axis=[]

for i in the_date_0:
    the_date.append(time.mktime(time.strptime(i, "%d-%m-%Y %H:%M:%S.0000")))

for i1 in range(0,len(the_date),3):
    time1=datetime.fromtimestamp(time.mktime(time.strptime("01-02-2018 09:56:00.0000", "%d-%m-%Y %H:%M:%S.0000")))+timedelta(seconds=i1)
    Date_axis.append(time.mktime(time1.timetuple()))

fig = plt.figure()
dateconv=np.vectorize(datetime.fromtimestamp)
Date_F=dateconv(the_date)
Date_axis_ok=dateconv(Date_axis)
ax1 = plt.subplot2grid((1,1), (0,0))
ax1.plot_date(Date_F,SO,'r-',label='the values')
ax1.set_yticks(range(0,1000,100))
ax1.set_xticks(Date_axis_ok)
ax1.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M:%S"))
for label in ax1.xaxis.get_ticklabels():
    label.set_rotation(45)
ax1.grid(True)
plt.legend()
plt.show()

Graph enter image description here

1 Answer 1

1

The problem is in the for loop in len(the_date). Add this part in your code:

from datetime import datetime, timedelta, date
duration = datetime.combine(date.min, datetime.strptime(the_date_0[-1], "%d-%m-%Y %H:%M:%S.0000").time()) - datetime.combine(date.min, datetime.strptime(the_date_0[0], "%d-%m-%Y %H:%M:%S.0000").time())
seconds = int(duration.total_seconds())

and modify the loop in this way:

for i1 in range(0,seconds,3):

Output: enter image description here

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.