我一直在尝试从包含日期和浮点数的逗号分隔的 csv 文件中绘制数据:
Date,Price (€)
01062017,20.90
02062017,30.90
03062017,40.90
04062017,60.90
05062017,50.90
然后我尝试使用以下代码绘制它:
import matplotlib.pyplot as plt
import numpy as np
import datetime
dates,cost = np.loadtxt('price_check.csv',delimiter=',',skiprows=1,unpack=True)
xdates = [datetime.datetime.strptime(str(int(date)),'%d%m%Y') for date in dates]
fig = plt.figure()
ax = plt.subplot(111)
plt.plot(xdates, cost,'o-',label='Cost')
plt.legend(loc=4)
plt.ylabel('Price (Euro)')
plt.xlabel('date')
plt.gcf().autofmt_xdate()
plt.grid()
plt.savefig('sunglasses_cost.png')
plt.show()
但是,当绘制数据时,日期字符串中的前导零似乎被删除:
有没有一种简单的方法可以在情节中使用完整的日期?
问题是日期,它们被转换为整数并丢失它们的前导零。然后"01062017"
变成1062017
,然后被解释为(2017, 6, 10, 0, 0)
,所以 2 位数字为日,一位数为月份。对于5062017
,因为没有 6 月 50 日,所以它被正确地解释为(2017, 6, 5, 0, 0)
。
解决此问题的侵入性最小的方法是格式化字符串,使其在日期时间转换之前始终具有 8 位数字:
xdates = [datetime.datetime.strptime('{:08}'.format(int(date)),'%d%m%Y') for date in dates]
这将导致正确的绘图。但是,xticklabels 可能会以不方便的方式显示。这可以通过选择一些定位器和格式化程序来调整
import matplotlib.dates as mdates
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
作为最后一条评论:如果您可以选择输入文件的格式,则可能值得以明确的方式指定它,例如20170601
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句