Почему использование datetime.striptime () для преобразования даты в matplotlib не показывает всю дату - PullRequest
1 голос
/ 01 марта 2020

Обновление:

добавьте коды, как показано ниже, чтобы устранить проблемы

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])

enter image description here

============================================== ===============================

Я выполняю упражнение, которое следует книге, когда я использую 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 enter image description here почему не отображается вся дата? и могу ли я его изменить?

вот код:

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()

1 Ответ

1 голос
/ 01 марта 2020

Как правило, matplotlib не отображать все метки, если они есть, так как это выглядит загроможденным. Если вы хотите показать все даты, тем не менее, вы можете добавить следующую строку:

plt.xticks(your_full_list_of_dates)

выше:

plt.show()

xticks может также использоваться для стиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...