python - 从文件中绘制日期与时间
问题描述
我有日期时间格式为 2018-08-21 到 2018-10-16 的文件夹名称
在每个文件夹内都有一个 zip 文件,其中包含时间值,这是一个线性比例,时间线性上升。
我正在尝试为每天绘制大量 .bz2 文件时间序列数据,即该日期的时间值。
现在我正在尝试这样做:
timearr = np.asarray(data1['time'])
ax.plot(np.asarray(timeStamps), timearr)
ax.set_title('title')
ax.set_ylabel('date vs time ')
ax.grid(True)
# Format the x-axis for dates (label formatting, rotation)
fig.autofmt_xdate(rotation=45)
fig.tight_layout()
plt.show()
但我收到一条错误消息,两个维度不匹配。
dateStamps are list[2018-08-21
2018-08-22
2018-08-23
2018-08-24
2018-08-25]
data1['time'] = list of EPOC values.
解决方案
不幸的是,我不知道详细的文件结构,所以我不得不猜测问题实际上是
下面是一些代码来生成一些带有通用 bz2 文件的文件夹:
import bz2
import numpy as np
import datetime
import os
startDate = datetime.datetime(2000,5,2,10,15,0,0)
for day in range(5):
theDate = startDate + datetime.timedelta(days=day)
folder = "{}".format( theDate.replace( microsecond = 0 ).strftime("%Y-%m-%d") )
os.mkdir( folder )
data = ""
for k in range(100):
zzz = theDate + datetime.timedelta(seconds=137*k)
data += "{} ".format( zzz.replace( microsecond = 0 ).strftime("%H:%M:%S") )
d = zzz.day
m = zzz.minute
data += " {}\n".format( .17 * d + .003 * m**2 -.001 * m )
myZip = bz2.BZ2File(os.path.join( folder, 'dat.bz2' ), 'w' )
myZip.write( data )
myZip.close()
这些文件夹和文件可用于:
import bz2
import numpy as np
import datetime
import os
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
"""
SE posts I used
https://stackoverflow.com/questions/1574088/plotting-time-in-python-with-matplotlib
https://stackoverflow.com/questions/11264521/date-ticks-and-rotation-in-matplotlib
"""
def split_data( inData ):
rows=data.strip().split('\n')
rowcol = [x.split() for x in rows ]
x,y = zip(*rowcol)
y = [float(z) for z in y ]
x = [ datetime.datetime.strptime(z, '%H:%M:%S') for z in x]
return x,y
dataDict = dict()
for root, dirs, files in os.walk("."):
for name in files:
if name.split('.')[-1]=='bz2':
base = os.path.basename( root )
myPath = (os.path.join(root, name))
bz = bz2.BZ2File( myPath, 'r' )
data = bz.read()
dataDict[ base ] = split_data( data )
myFmt = mdates.DateFormatter('%H:%M')
fig = plt.figure()
ax = fig.add_subplot( 1, 1, 1 )
for key, dt in dataDict.iteritems():
ax.plot( *dt , label=key )
ax.xaxis.set_major_formatter(myFmt)
for label in ax.get_xmajorticklabels():
label.set_rotation(30)
ax.set_ylabel('data (arb. u.)')
ax.set_xlabel('time')
ax.legend( loc=0 )
plt.tight_layout()
plt.show()
希望我做对了。
推荐阅读
- javascript - 我想制作一个在滚动时触发 css 动画的网站,没有垂直或水平移动。这可能吗?
- ios - 进入地理围栏时发送请求,此时没有网络连接
- ionic-framework - 使用组件 ion-datetime 信息以两行显示
- xamarin - 如何将存储文件保存到用户在 UWP 中选择的位置?
- php - Symfony - 重置数据库的最佳实践
- r - 如何在我的数据框中创建一个映射到 R 中列表的列?
- python - 从 Facebook Graph API 在 python 中获得喜欢
- c++ - 基于可被另一个数字整除的子数组中的索引
- javascript - 创建可以管理外部数据的抽象组件
- javascript - 如何为输入类型文件设置值