首页 > 解决方案 > 为什么使用 datetime.striptime() 为 matplotlib 转换日期不显示整个日期

问题描述

更新:

添加如下代码修复问题

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

在此处输入图像描述

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

我正在做本书后面的练习,当我使用matlibplotdatetime.strptime()中的文件转换日期时.csv,它不会在 x 轴上显示整个日期,例如,列表中的转换日期是[2014-07-01,2014-07 -02,...,2014-07-31]列表中共有 32 个。

但最后当我在 matpltlib 中绘制它时,它只在 x 轴上 显示[2014-07-01,2014-07-05,2014-07-09,2014-07-13]在此处输入图像描述 为什么它不显示整个日期?我可以修改它吗?

这是代码:

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

标签: pythoncsvmatplotlibplot

解决方案


通常matplotlib不显示所有标签,如果有很多标签,因为它看起来很混乱。如果您仍然想显示所有日期,您可以添加以下行:

plt.xticks(your_full_list_of_dates)

以上:

plt.show()

xticks也可以用于样式。


推荐阅读