Дата печати в зависимости от времени из файлов - PullRequest
0 голосов
/ 22 октября 2018

У меня есть имена папок, в которых даты и время отформатированы как 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.

1 Ответ

0 голосов
/ 22 октября 2018

К сожалению, я не знаю детальной структуры файла, поэтому я должен немного догадаться, где проблема на самом деле:

Вот код для генерации некоторых папок с общими файлами 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()

Предоставляя: some data

Надеюсь, я понял правильно.

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