【发布时间】:2018-06-28 09:48:13
【问题描述】:
我正在制作一个程序,它从 .txt 文件中读取时间值和读数,并使用 matplotlib 将它们绘制在网页上。在我的例子中,有很多值,而且情节看起来很混乱,而且有数千个数据点,它也可能很缓慢。
我目前正在阅读带有此代码的 .txt 行,以将值放入可绘制列表中:
with open('C:/Email/file.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]
.txt 文件内容如下所示:
30.05.18_12:27:17; 13.0; -0.0
30.05.18_12:27:18; 14.0; -0.0
30.05.18_12:27:19; 15.0; -0.0
30.05.18_12:27:20; 16.0; -0.0
那么,有没有什么方法可以读取和绘制每 N 个(例如每 30 个)时间戳和值?
我一直在研究不同的方法,但它们似乎令人困惑。
我正在考虑的一个解决方案是制作一个计数器来计算读取行的数量,然后当计数器为 30 时,跳过下一行 30 并读取并绘制第 31 行中的数据。我不知道如何这样做,因为我对 Python 比较陌生。
我们将不胜感激。
以防万一,整个代码在这里:
from flask import Flask
import numpy as np
import matplotlib.pyplot as plt, mpld3
from datetime import datetime
app = Flask(__name__)
@app.route("/")
def hello():
with open('C:/Email/file.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:%S') for x in dates]
plt.figure(figsize=(10,5))
plt.title('Temperature', fontsize=15)
plt.ylabel('Temperature' + u'\u2103', fontsize=15)
plt.plot_date(date, y, 'r-', label='quadratic')
plt.ylim([10,35])
# Print as HTML
return mpld3.show()
if __name__ == "__main__":
app.run()
编辑:非常感谢 MR. F-罗氏
用下面的代码搞定了:
@app.route("/")
def hello():
with open('C:/Email/file.txt') as f:
# Counts lines in text (Use later to delete lines every X readings)
# lines = f.readlines()
cpt = 0
all_lines = []
for line in f:
cpt += 1
if cpt == 30:
all_lines.append(line)
cpt = 0
dates = [str(line.split(';')[0]) for line in all_lines]
date = [datetime.strptime(x,'%d.%m.%y_%H:%M:%S') for x in dates]
y = [float(line.split(';')[1]) for line in all_lines]
z = [float(line.split()[2]) for line in all_lines]
plt.figure(figsize=(10,5))
plt.title('Temperature', fontsize=15)
plt.ylabel('Temperature' + u'\u2103', fontsize=15)
plt.plot_date(date, y, 'r-', label='quadratic')
plt.ylim([10,35])
# Print as HTML
return mpld3.show()
【问题讨论】:
标签: python numpy matplotlib