概述
背景:
最近有个需求,需要将数据画成折线图便于观察,并且数据是实时生成的(与时间有关),数据数量不确定,在网上看到大多数都是基于固定数据来进行画图,很少有将动态生成的数据画成图形的,因此研究了一下。
实现思路:
- 使用库:画图用matplotlib实现
- 获取跟随时间变化的数据,并将时间作为x轴,数据作为y轴
- 写一个循环,将数据“动态刷新”在画板上
- 由于数据数量不确定,因此x轴显示的数量个数最好固定(不然数据太多挤在一堆不好看),例如显示20个数据,当总数据个数超过20个后,将第一个数据不显示(将列表中的第一个值删除),最后一位新增一个数据,整体呈现的效果就是整个图像在向x轴的负方向移动。
方法实现不难,详情请见下列代码:
import matplotlib.pylab as plt
import time
import numpy as np
import random
from matplotlib.pyplot import MultipleLocator
import csv
x_list = [] # 用于存放x轴数据
y_list = [] # 用于存放y轴数据
temp_list_x = [] # 临时存放x轴数据
temp_list_y = [] # 临时存放y轴数据
show_num = 10 # x轴显示的数据个数,例:show_num = 10表示x轴只显示10个数据
num = 0
plt.ion() # 打开交互模式
fig1 = plt.figure(figsize=(100,80)) # 设置图片大小
plt.xlim(0, show_num) # 设置x轴的数值显示范围
x_major_locator=MultipleLocator(2) # 把x轴的刻度间隔设置为2
y_major_locator=MultipleLocator(10) # 把y轴的刻度间隔设置为10
ax=plt.gca() # ax为两条坐标轴的实例
ax.xaxis.set_major_locator(x_major_locator) # 把x轴的主刻度设置为2的倍数
ax.yaxis.set_major_locator(y_major_locator) # 把y轴的主刻度设置为10的倍数
def write_data(x, y):
"""
将数据写入csv文件中保存
:param x: x轴数据
:param y: y轴数据
:return:
"""
f = open('文件名.csv','a+',encoding="utf-8",newline="")
csv_writer = csv.writer(f)
# 写入csv文件内容
csv_writer.writerow([x, y])
f.close()
# 创建表头
f = open('文件名.csv','a+',encoding="utf-8",newline="")
csv_writer = csv.writer(f)
# 表头
csv_writer.writerow(["时间", "data"])
while True:
y = random.randint(30, 100)
y_list.append(y)
temp_list_y.append(y)
x = time.strftime("%H:%M:%S", time.localtime(time.time()))
x_list.append(x)
temp_list_x.append(x)
write_data(x, y)
if num > show_num:
temp_list_x.remove(temp_list_x[0])
temp_list_y.remove(temp_list_y[0])
# plt.clf() # 清除轴,当前活动轴在当前图中。 它保持其他轴不变。
plt.cla() # 清除整个当前数字。与所有的轴,但离开窗口打开,这样它就可以再用在其他的 plots上了。
# plt.close() # 关上窗户,如果未另指定,则该窗口将是当前窗口
plt.plot(temp_list_x, temp_list_y, c='r', ls='-') # 将图像显示出来
plt.pause(1) # 等待1s
num += 1
plt.ioff() # 关闭交互模式
plt.show()
注:上述方法实现起来略显粗糙,当前只提供一种思路,没有进行细节优化。
最后
以上就是精明果汁为你收集整理的将实时生成的数据用matplotlib画动态曲线,并将数据写入csv文件中的全部内容,希望文章能够帮你解决将实时生成的数据用matplotlib画动态曲线,并将数据写入csv文件中所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复