matplot 动态绘图 动画举例

本文介绍如何使用Python的Matplotlib库动态展示随机数序列及从CSV文件读取数据进行动态展示的方法。通过两个实例,一是生成并显示连续的随机数序列,二是从CSV文件中读取数据并实时更新图表,展示了动态数据可视化的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


10个随机数


 # -*- coding: utf-8 -*-  
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
fig = plt.figure() 
axes1 = fig.add_subplot(111) 
line, = axes1.plot(np.random.rand(10)) 
#因为update的参数是调用函数data_gen,
#所以第一个默认参数不能是framenum 
def update(data): 
  line.set_ydata(data) 
  return line, 
# 每次生成10个随机数据 
def data_gen(): 
  while True: 
    yield np.random.rand(10) 
ani = animation.FuncAnimation(fig, update, data_gen, interval=2*1000)
plt.show()


带暂停

import matplotlib.pyplot as plt  
import numpy as np  
import matplotlib.animation as animation  
  
pause = False  
def simData():  
    t_max = 10.0  
    dt = 0.05  
    x = 0.0  
    t = 0.0  
    while t < t_max:  
        if not pause:  
            x = np.sin(np.pi*t)  
            t = t + dt  
        yield t, x  
  
def onClick(event):  
    global pause  
    pause ^= True  
  
def simPoints(simData):  
    t, x = simData[0], simData[1]  
    time_text.set_text(time_template%(t))  
    line.set_data(t, x)  
    return line, time_text  
  
fig = plt.figure()  
ax = fig.add_subplot(111)  
line, = ax.plot([], [], 'bo', ms=10) # I'm still not clear on this stucture...  
ax.set_ylim(-1, 1)  
ax.set_xlim(0, 10)  
  
time_template = 'Time = %.1f s'    # prints running simulation time  
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)  
fig.canvas.mpl_connect('button_press_event', onClick)  
ani = animation.FuncAnimation(fig, simPoints, simData, blit=False, interval=10,  
    repeat=True)  
plt.show() 


从csv导入 带暂停

# -*- coding: utf-8 -*-
"""
Spyder Editor

This temporary script file is located here:
C:\Users\user\.spyder2\.temp.py
"""
"""
Show how to modify the coordinate formatter to report the image "z"
value of the nearest pixel given x and y
"""
# coding: utf-8

import time
import string
import os  
import math  
import pylab

import numpy as np
from numpy import genfromtxt
import matplotlib
import matplotlib as mpl
from matplotlib.colors import LogNorm
from matplotlib.mlab import bivariate_normal

import matplotlib.pyplot as plt
import matplotlib.cm as cm


import matplotlib.animation as animation

      
pause  = False
linenum=0

metric = genfromtxt('D:\export.csv', delimiter=',')

lines=len(metric)  
#print len(metric)
#print len(metric[4])
#print metric[4] 

rowdatas=metric[:,0]
for index in range(len(metric[4])-1):
    a=metric[:,index+1]
    rowdatas=np.row_stack((rowdatas,a))
    
#print len(rowdatas)
#print len(rowdatas[4])
#print rowdatas[4] 
#    

#plt.figure(figsize=(38,38), dpi=80)
#plt.plot(rowdatas[4] )
#plt.xlabel('time')
#plt.ylabel('value')
#plt.title("USBHID data analysis")
#plt.show()


##如果是参数是list,则默认每次取list中的一个元素,即metric[0],metric[1],... 
listdata=rowdatas.tolist()
print listdata[4]
#fig = plt.figure()  
#window = fig.add_subplot(111)  
#line, = window.plot(listdata[4] )  
 
#plt.ion()
#fig, ax = plt.subplots()
#line, = ax.plot(listdata[4],lw=2)
#ax.grid()


fig = plt.figure()  
ax = fig.add_subplot(111)  
line, = ax.plot(listdata[4],lw=2 ) # I'm still not clear on this stucture...
ax.grid()

time_template = 'Data ROW = %d'
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
 
#ax = plt.axes(xlim=(0, 700), ylim=(0, 255)) 
#line, = ax.plot([], [], lw=2) 
def onClick(event):
    global pause
    pause ^= True
    print 'user click the mouse!'
    print 'you pressed', event.button, event.xdata, event.ydata
#   event.button=1 鼠标左键按下 2 中键按下 3 右键按下    


def getData():  
    global listdata
    global linenum
    t = 0  
    while t < len(listdata[4]):
        if not pause: 
            linenum=linenum+1
        yield listdata[linenum-1]
#    while t < len(listdata[4]):  
#        t = t + 1  
#        print t,t
#        yield t, t  
        
def update(data):  
    global linenum
    line.set_ydata(data)    
    time_text.set_text(time_template % (linenum))
    return line,  

def init():
#    ax.set_ylim(0, 1.1)
#    ax.set_xlim(0, 10)
#    line.set_data(xdata)
    plt.xlabel('time')
    plt.ylabel('Time')
    plt.title('USBHID Data analysis')
    return line,
fig.canvas.mpl_connect('button_press_event', onClick)    
ani = animation.FuncAnimation(fig, update , getData , blit=False, interval=1*1000,init_func=init,repeat=False)  
plt.show()  


#my_data = genfromtxt('D:\export.csv', delimiter=',')
#rgbdata=my_data、255
#plt.figure(figsize=(38,38), dpi=80)
#
#for index in range(3):
#    row9=rgbdata[:,index]
#    print "row %d size is\n"%(index)
#    plt.plot(row9 )
#    plt.xlabel('time')
#    plt.ylabel('value')
#    plt.title("USBHID data analysis")
#    plt.legend()
##    plt.cla()
##    plt.clf()
#plt.show()
#plt.figure(1)
#plt.imshow(rgbdata, interpolation='nearest')
#plt.grid(True)
    
#fig = plt.figure() # 新图 0
#plt.savefig() # 保存
#plt.close('all') # 关闭图 0





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值