4

Take a look at this example:

import datetime as dt
from matplotlib import pyplot as plt 
import matplotlib.dates as mdates
x = []
d = dt.datetime(2013, 7, 4)
for i in range(30):
        d = d+dt.timedelta(days=1)
        x.append(d)

y = range(len(x))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.gcf().autofmt_xdate()
plt.bar(x,y)
plt.show()

The code writes out dates on the x-axis in the plot, see the picture below. The problem is that the dates get clogged up, as seen in the picture. How to make matplotlib to only write out every fifth or every tenth coordinate?

enter image description here

user1506145
  • 5,176
  • 11
  • 46
  • 75

1 Answers1

18

You can specify an interval argument to the DateLocator as in the following. With e.g. interval=5 the locator places ticks at every 5th date. Also, place the autofmt_xdate() after the bar method to get the desired output.

import datetime as dt
from matplotlib import pyplot as plt 
import matplotlib.dates as mdates
x = []
d = dt.datetime(2013, 7, 4)
for i in range(30):
        d = d+dt.timedelta(days=1)
        x.append(d)

y = range(len(x))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=5))
plt.bar(x, y, align='center') # center the bars on their x-values
plt.title('DateLocator with interval=5')
plt.gcf().autofmt_xdate()
plt.show()

Bar plot with ticks at every 5th date.

With interval=3 you will get a tick for every 3rd date:

Bar plot with ticks at every 3rd date.

sodd
  • 12,482
  • 3
  • 54
  • 62