python动态显示折线图

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等各类资料
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 动态图表和静态图表相比,灵活性强,更加信息可视化。 一:VLOOKUP动态图表的制作。首先①添加辅助列 姓名,②辅...
    5队COCOlittle阅读 1,017评论 0 0
  • Ubuntu安装 1.原料:Ubuntu系统、U盘(最好备份其中文件) Ubuntu官网下载。 2.制作安装盘 下...
    belly_0阅读 244评论 0 1
  • 创业行路艰, 挑灯连夜战未酣, 一念悲欢几过往?如烟。 初心未改泪已干, 敢为天下先, 梦萦妻儿笑靥缠, 纵横壮怀...
    壹壹捌捌阅读 319评论 0 0
  • 哈哈
    kill丘比特阅读 118评论 0 0
  • 以为走不出这小巷了楝树滴落的影子浸湿你的鞋尖 不,它们从不像眼泪滴落冬天的语言,一串串倒悬的子弹 在狂风的对峙中,...
    达斐阅读 317评论 1 1

友情链接更多精彩内容