gpt4 book ai didi

python - 从 txt.file 读取时间戳并使用 matplotlib (Web 服务器)将它们绘制在 X 轴上

转载 作者:行者123 更新时间:2023-12-01 01:48:11 25 4
gpt4 key购买 nike

我使用 Python 和 Pyramid 创建了一个 Web 应用程序,它从 gmail 获取最新的电子邮件,将数据保存到文件中,然后使用 matplotlib 绘制数据,并使用 mpld3 将其转换为 html 字符串。目前,我的电子邮件中包含以下形式的数据:

17  25

18 25

19 25

20 26

我在绘制这些数据时没有任何问题。但是,我想以相同的形式绘制数据,但带有时间戳,如下所示:

25-06-2018 9:11  25

25-06-2018 9:12 25

25-06-2018 9:13 25

...

我尝试将数据转换为日期时间格式,但没有成功。这是我的代码:

from pyramid.config import Configurator
from pyramid.response import Response
import email
import getpass
import imaplib
import os
import re
import numpy as np
import matplotlib.pyplot as plt, mpld3

def imaptest(request):

m = imaplib.IMAP4_SSL('imap.gmail.com')
m.login('email@gmail.com', 'password')
m.list()
m.select('inbox')

result, data = m.uid('search', None, 'UNSEEN')

i = len(data[0].split()) #space separate string

for x in range(i):
latest_email_uid = data[0].split()[x]
result, email_data = m.uid('fetch', latest_email_uid, '(RFC822)')
raw_email = email_data[0][1]
raw_email_string = raw_email.decode('utf-8')
email_message = email.message_from_string(raw_email_string)


for part in email_message.walk():
if part.get_content_type() == 'text/plain':
body = part.get_payload(decode=True)
save_string = str('C:\Email\mail1' + str(x) + '.txt')
myfile = open(save_string, 'a')
myfile.write(str(body))
myfile.close
else:
continue

with open('C:\Email\mail10.txt') as f:
lines = f.readlines()
x = [int(line.split()[0]) for line in lines]
y = [int(line.split()[1]) for line in lines]

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title('Test Graph')
ax1.set_xlabel('Time')
ax1.set_ylabel('Temperature')

plt.plot(x,y)


# Print as HTML
return Response(
mpld3.show()
)

config = Configurator()
config.add_route('imaptest', '/imaptest')
config.add_route('landingpage', '/landingpage')
config.add_view(landingpage, route_name='landingpage')
config.add_view(imaptest, route_name='imaptest')
app = config.make_wsgi_app()

最佳答案

过了一段时间我就明白了。

首先,我必须将时间值转换为字符串数组而不是整数数组:

lines = f.readlines()
dates = [str(line.split()[0]) for line in lines]

然后我使用日期时间模块将数组转换为日期时间类型数组:

from datetime import datetime
date = [datetime.strptime(x,'%d-%m-%Y/%H:%M') for x in dates]

然后我用 matplotlib 在 X 轴上绘制日期时间,在 Y 轴上绘制我的值:

plt.subplot(2,1,1)      
plt.title('Temperature & Humidity')
plt.ylabel('Temperature' + u'\u2103')
plt.plot_date(date, y, 'r.-')

这是完整的代码,以防万一其他人可以使用它:

import numpy as np
import matplotlib.pyplot as plt, mpld3
from datetime import datetime



def landingpage(request):

with open('C:\Email\mail10.txt') as f:
lines = f.readlines()
dates = [str(line.split()[0]) for line in lines]
y = [float(line.split()[1]) for line in lines]
z = [float(line.split()[2]) for line in lines]

date = [datetime.strptime(x,'%d-%m-%Y/%H:%M') for x in dates]

plt.subplot(2,1,1)

plt.title('Temperature & Humidity')
plt.ylabel('Temperature' + u'\u2103')
plt.plot_date(date, y, 'r.-')


plt.subplot(2,1,2)
plt.plot_date(date, z, 'b.-')
plt.xlabel('Time')
plt.ylabel('Humidity RH%'.decode('unicode-escape'))






# Print as HTML
return Response(
mpld3.show()
)

关于python - 从 txt.file 读取时间戳并使用 matplotlib (Web 服务器)将它们绘制在 X 轴上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51017294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com