python动态显示折线图
作者:村里有个男孩叫小方
1.编程环境
- python 2.7.15
- matplotlib
2.项目要求
从sqlite数据库中每一秒读取一次数据(这里就不做详细的代码说明了,本实验中会用数据模拟)动态显示从数据库中读出来的数据
3.matplotlib初体验
通过了解matplotlib做一个静态图来熟悉matplotlib的使用
3.1 显示一个静态的折线图
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
listx = [1, 2, 3 ,4 ,5 ,6 ,7] #x轴数据
listy = [2, 4, 6 ,8 ,10 ,12 ,14] #y轴数据
'''
设置x轴和y轴意思,和该表的名字
'''
plt.xlabel('time') #设置横轴为时间
plt.ylabel('data') #设置纵轴为数据data
plt.title('matplotlib test') #该表的名字为 matplotlib
#plt.xlim(-1, 11) # 限定横轴的范围
#plt.ylim(-1, 110) # 限定纵轴的范围
'''
设置绘图对象,可设置器背景颜色大小,和一些交互功能等
'''
plt.plot(listx, listy, "b--", linewidth=1) #在当前绘图对象绘图(X轴,Y轴,蓝色虚线,线宽度)
plt.show() #显示图片
plt.close()
4 初步设计思路
- 从数据库中获取值,每一次追加到要显示的listx和listy中
- 然后show()
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import time
listx =[]
listy =[]
j=0
a=0
#X轴,Y轴数据
while 1:
listx.append(j)
listy.append(j)
plt.plot(listx,listy,"b--",linewidth=1) #在当前绘图对象绘图(X轴,Y轴,蓝色虚线,线宽度)
plt.xlabel("Time(s)") #X轴标签
plt.ylabel("Volt") #Y轴标签
plt.title("Line plot") #图标题
plt.show() #显示图
j = j + 1
a = a + 2
time.sleep(1)
========结果分析======:发现 plt.show()是一个阻塞函数,代码会卡在plt.show()中不动,这该怎么处理呢!启动百度大法==
5 查阅资料
经百度查询发现如下结果
python可视化库matplotlib有两种显示模式:阻塞(block)模式
交互(interactive)模式区别如下:
在交互模式下:
plt.plot(x)或plt.imshow(x)是直接出图像,不需要plt.show()
如果在脚本中使用ion()命令开启了交互模式,没有使用ioff()关闭的话,则图像会一闪而过,并不会常留。要想防止这种情况,需要在plt.show()之前加上ioff()命令。在阻塞模式下:
打开一个窗口以后必须关掉才能打开下一个新的窗口。这种情况下,默认是不能像Matlab一样同时开很多窗口进行对比的。
plt.plot(x)或plt.imshow(x)是直接出图像,需要plt.show()后才能显示图像
6.最终代码代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import time
from math import *
listx =[]
listy =[]
j=0
a=0
#X轴,Y轴数据
plt.ion()#开始交互模式
while 1:
listx.append(j)
listy.append(j)
plt.plot(listx,listy,"b--",linewidth=1) #在当前绘图对象绘图(X轴,Y轴,蓝色虚线,线宽度)
plt.xlabel("Time(s)") #X轴标签
plt.ylabel("Volt") #Y轴标签
plt.title("Line plot") #图标题
plt.show() #显示图
print listx
print listy
j = j + np.random.random()
a = a + 2
plt.pause(1)
==这里还有一个坑time.sleep(1)也是阻塞的,最后替换成plt.pause(1)成功做出==
最后有什么不懂的,或者代码有错误及时指正,收到评论后会尽快修改
福利时间 :关注微信公众号:chengxuyuanxiaofang
微信公众号二维码.jpg
获取免费的python嵌入式java等各类资料
网友评论