我试图做一个散点图,我的x轴需要是一年中的每一天。
我首先在数据文件中读取并获取日期列,其中填充了整数,例如19800801.所以我将此integer
转换为datetime
,写成:
datetimes_0 = datetime.strptime(str(dates_pitts[0]), '%Y%m%d')
然后我想通过写:
从datetime对象中仅提取月和日s = datetimes_0.strftime("%m%d")
我意识到他们从strftime
返回的值不再是日期时间对象,所以我尝试通过执行将其转换回datetime对象
s0= datetime.strptime(s, '%m%d')
但不是只给我一个月和一天,而是让我回到了整年,一个月和一天。 我的问题是如何从给定的整数(例如19800801)中提取只有月和日(两者)的日期时间对象?
答案 0 :(得分:9)
如果您尝试在matplotlib中绘制基于时间的数据,通常的方法是首先将日期转换为datatime
个对象,然后使用mat {来获取matplotlib将其转换为自己的内部表示形式{{ 3}}功能。接下来,您可以告诉matplotlib如何使用格式化程序格式化x轴上的任何刻度,在本例中为date2num()
。因此,您可以选择显示每个刻度的月和日。
在此示例中,我显示月份,下面一行显示日期:
from matplotlib import pyplot, dates
from datetime import datetime
data = [("19800801", 16), ("19800810", 10), ("19800901", 15), ("19800905", 14)]
xaxis = [datetime.strptime(d, '%Y%m%d') for d, v in data]
yaxis = [v for d, v in data]
ax = pyplot.gca()
xaxis = dates.date2num(xaxis) # Convert to maplotlib format
hfmt = dates.DateFormatter('%m\n%d')
ax.xaxis.set_major_formatter(hfmt)
pyplot.xlabel('Date')
pyplot.ylabel('Value')
pyplot.plot(xaxis, yaxis)
pyplot.tight_layout()
pyplot.show()
这将显示如下:
然后你可以扩展它以使用DayLocator()
告诉matplotlib将xticks放在确切的日期位置,如下所示:
ax.xaxis.set_major_locator(dates.DayLocator())
给你:
答案 1 :(得分:7)
这将采用一个整数(假设它是一个有效的纪元)并将其转换为python datetime对象:
>>> import datetime
>>> date = datetime.datetime.fromtimestamp(19800801)
>>> print date.month
8
>>> print date.day
17
或使用strftime(返回字符串而不是datetime对象):
>>> datetime.datetime.fromtimestamp(19800801).strftime('%m%d')
'0817'
将月份和日期输出为单个整数:
>>> int(datetime.datetime.fromtimestamp(19800801).strftime('%m%d'))
817