1. 程式人生 > >python中plot實現即時資料動態顯示方法

python中plot實現即時資料動態顯示方法

Matlab使用Plot函式實現資料動態顯示方法總結中介紹了兩種實現即時資料動態顯示的方法。考慮到使用python的人群日益增多,再加上本人最近想使用python動態顯示即時的資料,網上方法很少,故總結於此。本人主要在jupyter notebook作為互動式的python執行環境,但考慮不使用jupyter notebook的情況。所以下面主要分成針對jupyter notebook環境的增量式資料動態顯示方法,與通用的(jupyter notebook 與非juypter notebook都適用)方法兩大類。先介紹通用的方法,後介紹針對jupyter notebook的方法。

1. 通用的方法

1.1 需要儲存歷史資料

示例程式碼1-1

import matplotlib.pyplot as plt
import numpy as np
import time
from math import *

plt.ion() #開啟interactive mode 成功的關鍵函式
plt.figure(1)
t = [0]
t_now = 0
m = [sin(t_now)]

for i in range(2000):
	plt.clf() #清空畫布上的所有內容
    t_now = i*0.1
    t.append(t_now)#模擬資料增量流入,儲存歷史資料
    m.append(sin(t_now))#模擬資料增量流入,儲存歷史資料
    plt.plot(t,m,'-r')
    plt.draw()#注意此函式需要呼叫
    time.sleep(0.01)

1.2 無需儲存資料

示例程式碼1-2

import matplotlib.pyplot as plt
import numpy as np
import time
from math import *

plt.ion() #開啟interactive mode 成功的關鍵函式
plt.figure(1)
t = [0]
t_now = 0
m = [sin(t_now)]

for i in range(2000):
	# plt.clf() # 清空畫布上的所有內容。此處不能呼叫此函式,不然之前畫出的點,將會被清空。
    t_now = i*0.1
    """
    由於第次只畫一個點,所以此處有兩種方式,第一種plot函式中的樣式選
    為點'.'、'o'、'*'都可以,就是不能為線段'-'。因為一條線段需要兩
    個點才能確定。第二種方法是scatter函式,也即畫點。
    """
    plt.plot(t_now,sin(t_now),'.') # 第次對畫布新增一個點,覆蓋式的。
    # plt.scatter(t_now, sin(t_now)) 

    plt.draw()#注意此函式需要呼叫
    time.sleep(0.01)

這裡寫圖片描述

1.3 無需儲存資料(進階版)

以上是動態的顯示一個函式,也即直觀上一條軌跡不斷的延伸。這是一種應用,另一種應用是在一張畫布上增量式的畫多條軌跡(函式)。

示例程式碼1-3

import matplotlib.pyplot as plt
import numpy as np
import time
from math import *
 
plt.ion() #開啟interactive mode 成功的關鍵函式
plt.figure(1)
t = np.linspace(0, 20, 100)


 
for i in range(20):
	# plt.clf() # 清空畫布上的所有內容。此處不能呼叫此函式,不然之前畫出的軌跡,將會被清空。
    y = np.sin(t*i/10.0)
    plt.plot(t, y) # 一條軌跡
    plt.draw()#注意此函式需要呼叫
    time.sleep(1)

這裡寫圖片描述

Jupyter notebook版本

也對應三種應用:需要儲存歷史資料,無需儲存歷史資料,無需儲存歷史資料進階版。

注意:在Jupyter notebook中顯示python的畫圖程式時,需要新增%matplotlib inline,但是身邊有人執行本部落格中的程式時會出現無法正常顯示動態圖片的情況,並且本人在自己電腦windows 10環境下(python 3.6)執行本文中動態顯示圖片的程式時,也會出現上述情況。出現該情況,只需要將程式中出現的所有inline改為qt5,例如%matplotlib inline改為%matplotlib qt5,以及is_ipython = 'inline' in matplotlib.get_backend()改為is_ipython = 'qt5' in matplotlib.get_backend()即可。基於QT的圖形顯示介面會跳出jupyter notebook顯示動態圖,而且會多出許多可選的按鈕。大家可以自行探索。建議大家,先執行本文的程式,如果不成功,再做此改變。因為,原本inline成功的,改為qt5後,可能反而不成功。

2.1 需要儲存歷史資料

示例程式碼2-1

上面的方式,可以在跳出的畫圖面板內動態顯示,但是如果想在jupyter notebook中直接動態顯示,上面的方法將無效。因此,補上在jupyter notebook中可行的動態顯示示例程式。以供舉一反三之用。

import math
import random
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline

# set up matplotlib
is_ipython = 'inline' in matplotlib.get_backend()
if is_ipython:
    from IPython import display

plt.ion()

def plot_durations(y):
    plt.figure(2)
    plt.clf()
    plt.subplot(211)
    plt.plot(y[:,0])
    plt.subplot(212)
    plt.plot(y[:,1])

    plt.pause(0.001)  # pause a bit so that plots are updated
    if is_ipython:
        display.clear_output(wait=True)
        display.display(plt.gcf())
        
x = np.linspace(-10,10,500)
y = []
for i in range(len(x)):
    y1 = np.cos(i/(3*3.14))
    y2 = np.sin(i/(3*3.14))
    y.append(np.array([y1,y2])) #儲存歷史資料
    plot_durations(np.array(y))

這裡寫圖片描述

2.2 無需儲存歷史資料

示例程式碼2-2

import math
import random
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline

# set up matplotlib
is_ipython = 'inline' in matplotlib.get_backend()
if is_ipython:
    from IPython import display

plt.ion()

def plot_durations(i, y1, y2):
    plt.figure(2)
#     plt.clf() 此時不能呼叫此函式,不然之前的點將被清空。
    plt.subplot(211)
    plt.plot(i, y1, '.')
    plt.subplot(212)
    plt.plot(i, y2, '.')

    plt.pause(0.001)  # pause a bit so that plots are updated
    if is_ipython:
        display.clear_output(wait=True)
        display.display(plt.gcf())
        
x = np.linspace(-10,10,500)
y = []
for i in range(len(x)):
    y1 = np.cos(i/(3*3.14))
    y2 = np.sin(i/(3*3.14))
#     y.append(np.array([y1,y2])) #儲存歷史資料
    plot_durations(i, y1, y2)

這裡寫圖片描述

2.3 無需儲存歷史資料(進階版)

示例程式碼2-3

import math
import random
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline

# set up matplotlib
is_ipython = 'inline' in matplotlib.get_backend()
if is_ipython:
    from IPython import display

plt.ion()

def plot_durations(y1, y2):
    plt.figure(2)
#     plt.clf()
    plt.subplot(211)
    plt.plot(x, y1)
    plt.subplot(212)
    plt.plot(x, y2)

    plt.pause(0.001)  # pause a bit so that plots are updated
    if is_ipython:
        display.clear_output(wait=True)
        display.display(plt.gcf())



x = np.linspace(-10,10,500)
for i in range(100):
    y1 = np.cos(x*i/(3*3.14))
    y2 = np.sin(x*i/(3*3.14))
    plot_durations(y1, y2)

這裡寫圖片描述

相關推薦

pythonplot實現即時資料動態顯示方法

在Matlab使用Plot函式實現資料動態顯示方法總結中介紹了兩種實現即時資料動態顯示的方法。考慮到使用python的人群日益增多,再加上本人最近想使用python動態顯示即時的資料,網上方法很少,故

Matlab使用Plot函式實現資料動態顯示方法總結

引子 對於真實系統或者模擬平臺,資料是增量式的產生的。Matlab除了強大的矩陣運算外,還具有強大的資料視覺化庫。由於靜態畫圖的方法較多,本文只針對增量式資料流的動態顯示。本文主要介紹幾種Matlab實現資料的動態顯示方法。方法主要有兩種: hol

python如何實現資料分成訓練集與測試集

接下來,直接給出大家響應的程式碼,並對每一行進行標註,希望能夠幫到大家。 需要用到的是庫是。numpy 、sklearn。 #匯入相應的庫(對資料庫進行切分需要用到的庫是sklearn.model

python為類和例項動態增加方法

>>> def func(a,b): ...     print a,b ...   >>> class Foo(object): ...     pass ...      >>> foo = Foo()

python如何遍歷資料夾及其子資料的所有檔案(附實現程式碼)

【時間】2018.10.27 【題目】python中如何遍歷資料夾及其子資料夾中的所有檔案 目錄 概述 概述       本文提供了python中如何遍歷資料夾及其子資料夾中的所有檔案的兩種方法。兩者均返回檔名列表(可以選擇檔名列表或者是包含完整路徑的檔名列

利用 Python Bokeh 實現資料視覺化,第二部分:互動

原文地址:Data Visualization with Bokeh in Python, Part II: Interactions 原文作者:Will Koehrsen 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold-m… 譯者:Sta

python 處理csv資料 動態顯示曲線 matplot動畫

# -*- coding: utf-8 -*- """ Spyder Editor This temporary script file is located here: C:\Users\user\.spyder2\.temp.py """ """ Show how t

python訪問資料庫時間類別的資料正確顯示的問題

畢設需要用Python訪問資料庫並返回資料,其中資料庫中表的某一列存放的是考試時間的資料 如:2017-05-01    09:00:00 python訪問資料庫返回列印這一列資料時在控制檯出現如下結果: datetime.datetime(2017, 5, 1, 9, 0

javascript實現日期時間動態顯示

tle text title .net lns code post str interval .aspx代碼例如以下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"

pythonmatplotlib實現最小二乘法擬合的過程詳解

ast array plt atp ons 正則 key code 擬合 這篇文章主要給大家介紹了關於python中matplotlib實現最小二乘法擬合的相關資料,文中通過示例代碼詳細介紹了關於最小二乘法擬合直線和最小二乘法擬合曲線的實現過程,需要的朋友可以參考借鑒,下

程序和執行緒——Python實現

一、程序(Process)     程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域儲存變數和程序執行期間使用的動

Python遍歷pandas資料的幾種方法介紹和效率對比說明

前言 Pandas是python的一個數據分析包,提供了大量的快速便捷處理資料的函式和方法。其中Pandas定義了Series 和 DataFrame兩種資料型別,這使資料操作變得更簡單。Series 是一種一維的資料結構,類似於將列表資料值與索引值相結合。DataFrame 是一種二維

互相關(cross-correlation)及其在Python實現

互相關(cross-correlation)及其在Python中的實現 在這裡我想探討一下“互相關”中的一些概念。正如卷積有線性卷積(linear convolution)和迴圈卷積(circular convolution)之分;互相關也有線性互相關(linear cross-correlation

pythonpost請求json資料且返回json資料處理

上篇講到以json形式傳送post請求。 此次為 post請求返回物件對json 時的處理辦法 請求 #請求 response = requests.post(url, data=json.dumps(pyload),headers=headers).text

分類問題(一):SVM(Python——基於skearn實現鳶尾花資料集分類)

第一步: # -*- coding: utf-8 -*- """ Created on Fri Sep 21 14:26:25 2018 @author: bd04 """ # !/usr/bin/env python # encoding: utf-8 __auth

KST-51微控制器:c語言程式設計實現數碼管動態顯示秒錶的倒計時

/*60S倒計時*/ /*個位每1S變一次,從0~9*/ /*十位,個位為0的下一秒十位發生變化*/ #include<reg52.h> sbit ADDR0=P1^0; sbit ADDR1=P1^1; sbit ADDR2=P1^2; sbit ADDR3

SpringMVCEhCache實現快取資料

       EhCache 是一個純Java的程序內快取框架,具有快速、精幹等特點,是Hibernate中預設CacheProvider。Ehcache是一種廣泛使用的開源Java分散式快取。主要面向通用快取,Java EE和輕量級容器。它具有記憶體和磁碟儲存,快取載入器,

pyQuery在python實現css選擇器功能

# -*- coding=utf-8 -*- import sys import pdb from pyquery import PyQuery as pyq import urllib url=r'http://list.taobao.com/browse/cat-0.

D2admin框架:V-charts統計圖資料動態顯示

(個人筆記,可能有不正確之處,還需修改) 框架&資料庫:node.js+D2admin+V-charts+SQL Server 使用Axios 步驟: 1.安裝模組express、mssql,建立後端資料操作檔案server.js (寫明資料連線資訊,資料庫

Python的四種資料結構

Python中的內建資料結構(Built-in Data Structure):列表list、元組tuple、字典dict、集合set,涵蓋的僅有部分重點。 一、列表list   list的顯著特徵: 列表中的每個元素都可變的,意味著可以對每個元素進行修改和刪除;