Good date format on x axis matplotlib

I have the following framework:

Time    test
0:05    2
0:06    2
0:07    2
0:08    2
0:09    2
0:10    2
0:11    2

      

This date starts at 0:00 and ends at 11:59. I created the following graph:

x = dftestgraph['Time']
y = dftestgraph['test']
plt.ylabel('Number of tasks')
plt.plot(x, y, color="#00a1e4", label="Number of Tasks")
plt.fill(x, y, '#00a1e4', alpha=0.8)
plt.show()

      

Graph

Why is there a line at the bottom of the graph that splits my completed graph in half? And I would like to format the x-axis as (0:00, 0:30, 1:00, etc.). I tried:

plt.xticks(0:00, 11:59, 30:00))

      

However, this doesn't work. My question is:

  • Why is there a line in my graph and how can I solve this?
  • How do I set the X axis to the correct format?
+3


source to share


1 answer


plt.fill

basically connects the first and last point of the time series to construct its polygon. I would use fill_between .

I have compiled below an MWE that shows how this can be done. It also shows a way to format the xaxis labels the way you wanted, obtained from the following posts: Generating a graph with date and time in axis labels using matplotlib and Plotting time in Python with Matplotlib .

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import dates
import datetime

plt.close('all')

#---- generate some data ----

t = [datetime.datetime(2015, 1, 1, 0) + 
     datetime.timedelta(hours=i) for i in np.arange(0,12.1,0.5)]
x = np.random.rand(len(t))

#---- create figure and axe ----

fig = plt.figure()

ax = fig.add_axes([0.1, 0.2, 0.85, 0.75])

#---- format xaxis ----

# position of the labels
xtk_loc = [datetime.datetime(2015, 1, 1, 0) + 
           datetime.timedelta(hours=i) for i in np.arange(0,12.1,0.5)]
ax.set_xticks(xtk_loc)
ax.tick_params(axis='both', direction='out', top='off', right='off')

# format of the labels
hfmt = dates.DateFormatter('%H:%M')
ax.xaxis.set_major_formatter(hfmt)
fig.autofmt_xdate(rotation=90, ha='center')

#---- set axes labels ----

ax.set_ylabel('Number of tasks', labelpad=10, fontsize=14)
ax.set_xlabel('Time', labelpad=20, fontsize=14)

#---- plot data ----

ax.plot(t, x, color="#004c99", label="Number of Tasks")
ax.fill_between(t, x, 0, facecolor='#00a1e4', alpha=0.5, lw=0.5)

#---- set axis limits ----

timemin = datetime.datetime(2015, 1, 1, 0)
timemax = datetime.datetime(2015, 1, 1, 12)

ax.axis(xmin=timemin, xmax=timemax)

plt.show()  

      



that leads to:

enter image description here

+7


source







All Articles