美文网首页
python动态显示折线图

python动态显示折线图

作者: 程序员学习库 | 来源:发表于2018-12-08 11:58 被阅读0次

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等各类资料

相关文章

网友评论

      本文标题:python动态显示折线图

      本文链接:https://www.haomeiwen.com/subject/yuqqhqtx.html