Почему Matplotlib имеет такое странное поведение с типом данных Date?
Matplotlib позволяет вам изначально составлять графики Python Datetime и по большей части делает хороший тик выбора работыместоположения и строковые форматы.Из документации"Устранение общих раздражителей дат"
Я также прочитал этот вопрос , который дал мне некоторые подсказки, связанные с Формат даты Matplotlib .Я также прочитал вопросы с наибольшим количеством голосов о matplotlib
и Datetime
, но я все еще не понимаю следующее поведение.
#timestamp is a <class 'list'>
timestamp=['2019-02-04', '2019-01-15', '2018-10-08', '2018-07-09',
'2018-04-09', '2018-02-08', '2017-09-08', '2017-09-08',
'2017-07-07', '2017-04-07', '2017-01-09', '2016-10-07',
'2016-07-01', '2016-03-25', '2015-12-27', '2015-09-25',
'2015-06-26', '2015-03-27', '2014-12-24', '2014-10-06',
'2014-07-02', '2014-03-28', '2013-12-20', '2013-09-27',
'2013-06-11', '2013-03-27', '2012-12-27', '2012-09-26',
'2012-06-13', '2012-03-28', '2011-12-14', '2011-09-28',
'2011-06-14', '2011-03-30', '2010-12-15', '2010-09-29',
'2010-06-19', '2010-03-31', '2009-12-29', '2009-09-30',
'2009-06-17', '2009-04-01', '2008-12-20', '2008-08-25',
'2008-08-25', '2008-06-19', '2008-03-19', '2008-03-19',
'2006-04-11', '2005-12-27', '2005-09-28', '2005-07-02',
'2005-04-20', '2004-12-21', '2004-10-20', '2004-07-21',
'2003-09-22', '2003-08-20', '2002-12-31']
#time_python is a <class 'datetime.datetime'>
time_python=[datetime.strptime(d, "%Y-%m-%d") for d in timestamp]
#time_series is a <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
time_series=pd.to_datetime(timestamp)
array=np.arange(1,len(timestamp)+1)
time_2_num=mdates.date2num(time_series.to_pydatetime())
#First plot using the List Format as x axes
plt.subplot(411)
plt.bar(timestamp,array)
plt.xticks(rotation='vertical')
#Second plot using the padas Datatime Format as x axes
plt.subplot(412)
plt.bar(time_series,array)
plt.xticks(rotation='vertical')
plt.subplots_adjust(hspace = 1.2)
#Third plot using the DateTime Format as x axes
plt.subplot(413)
plt.bar(time_python,array)
plt.xticks(rotation='vertical')
plt.subplots_adjust(hspace = 1.2)
#Fourth plot using the Matplot Date Format as x axes
plt.subplot(414)
plt.bar(time_2_num,array)
plt.xticks(rotation='vertical')
plt.subplots_adjust(hspace = 1.2)
plt.gcf().autofmt_xdate()
plt.show()
Желаемый результат, очевидно, является первым графиком.
Я хочу лучше понять, почему барыграфика II, III, IV имеет это представление, отличное от I. Вход y одинаков для 4 графиков.