Either Numpy or Matplotlib is changing the order of my np.array and it\'s conflicting with my plot. It\'s causing the months to be out of order while the corresponding data
You will need to use MonthLocator
and set_major_locator
as shown here: formatting timeseries x-axis in pandas/matplotlib
Here is my attempt:
import matplotlib.pyplot as plt
import numpy as np
import datetime
f = np.array([53, 56, 63, 72, 79, 86, 89, 88, 83, 74, 65, 56])
# New stuff:
from matplotlib.dates import MonthLocator, DateFormatter
dates = []
for month in range(1, 13):
dates.append(datetime.datetime(year=2018, month=month, day=1))
plt.plot(dates, f)
ax = plt.gca()
ax.set_xlim([dates[0], dates[-1]])
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(DateFormatter('%b'))
plt.xlabel('Month')
plt.ylabel('Temperature')
plt.title('Average Monthly Temperature in Elizabeth City, NC')
plt.show()
Since month
is a string array, plt.plot()
command is sorting it alphabetically. So, we have to use the xticks
and then plot it like below to get the strings in the same order as it were in the original array month
.
In [16]: f = np.array([53, 56, 63, 72, 79, 86, 89, 88, 83, 74, 65, 56])
...: month = np.array(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"])
...: plt.xticks(range(len(f)), month)
...: plt.plot(f)
Plot:
Note: For more customized plots refer: pylab date demo