Обновление:
добавьте коды, как показано ниже, чтобы устранить проблемы
import matplotlib.dates as mdates
fig.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
fig.gca().xaxis.set_major_locator(mdates.DayLocator())
'''this for minor ticks'''
fig.gca().xaxis.set_minor_formatter(mdates.DateFormatter('%Y/%m/%d'))
fig.gca().xaxis.set_minor_locator(mdates.WeekdayLocator(mdates.MONDAY))
'''disabled major and minor overlapping'''
fig.gca().xaxis.remove_overlapping_locs = False
или: plt.xticks(days, [i.date() for i in days])
============================================== ===============================
Я выполняю упражнение, которое следует книге, когда я использую datetime.strptime()
для преобразования даты из файла .csv
в matlibplot, например, не отображается вся дата по оси x, дата преобразования в списке - [2014-07-01,2014-07-02 ,. .., 2014-07-31] всего 32 в списке.
но, наконец, когда я отображаю его в matpltlib, он показывает только [2014-07-01,2014-07-05, 2014-07-09,2014-07-13] по оси x
почему не отображается вся дата? и могу ли я его изменить?
вот код:
import csv
from matplotlib import pyplot as plt
from datetime import datetime
filename='sitka_weather_07-2014.csv'
with open(filename,'r') as f,open('xx.csv','w') as w:
content=csv.reader(f,delimiter=',',quotechar='"')
'''shift to title'''
header=next(content)
days,temps=[],[]
for value in content:
'''value[0] for the Date'''
a=datetime.strptime(value[0],'%Y/%m/%d')
days.append(a)
'''value[1] for Temp'''
b=int(value[1])
temps.append(b)
print(len(days))
#>> 31 #here is 32 days in list
fig=plt.figure(figsize=(10,6))
font={'weight':'normal',
'color':'cyan',
'fontsize':24,
}
plt.title('Weather',fontdict=font)
plt.xlabel('Date',fontdict=font)
plt.ylabel('Temperature',fontdict=font)
fig.autofmt_xdate()
for x,y in zip(days,temps):
plt.text(x,y+0.1,y,ha='center',va='bottom',fontsize=8,color='red')
plt.plot(days,temps,marker='o',mfc='red',mec='None')
plt.show()