簡體   English   中英

從 numpy 陣列中的 matplotlib 實時繪圖

[英]Real time plotting in matplotlib from a numpy array

我的任務是使用matplotlib實時 plot 一個numpy數組。 請注意,我不想使用animation function 來執行此操作。

import numpy as np
import  time 
from matplotlib.lines import Line2D
import matplotlib

class Plot:
    def __init__(self,f,axis,data):
        self.fig = f
        self.axis = axis
        self.data = data 
        
    def plotting(self,i):
        xs = [self.data[i,0],self.data[i+1,0]]
        ys = [self.data[i,1],self.data[i+1,1]]
        line, = self.axis.plot(xs,ys,'g-')
        
        self.fig.canvas.draw()
        
data = np.random.rand(10,2) #numpy array
f = plt.figure()
axis = f.add_axes([0,0,0.9,0.9])    
        
plotData = Plot(f,axis,data)
for i in range(len(data)-1):
    plotData.plotting(i)
    time.sleep(1)

plt.show()

但每次我運行這段代碼時,它都會返回一個空圖。 我該如何糾正它?

import matplotlib.pyplot as plt
import numpy as np

# use ggplot style for more sophisticated visuals
plt.style.use('ggplot')

def live_plotter(x_vec,y1_data,line1,identifier='',pause_time=0.1):
    if line1==[]:
        # this is the call to matplotlib that allows dynamic plotting
        plt.ion()
        fig = plt.figure(figsize=(13,6))
        ax = fig.add_subplot(111)
        # create a variable for the line so we can later update it
        line1, = ax.plot(x_vec,y1_data,'-o',alpha=0.8)        
        #update plot label/title
        plt.ylabel('Y Label')
        plt.title('Title: {}'.format(identifier))
        plt.show()
    
    # after the figure, axis, and line are created, we only need to update the y-data
    line1.set_ydata(y1_data)
    # adjust limits if new data goes beyond bounds
    if np.min(y1_data)<=line1.axes.get_ylim()[0] or np.max(y1_data)>=line1.axes.get_ylim()[1]:
        plt.ylim([np.min(y1_data)-np.std(y1_data),np.max(y1_data)+np.std(y1_data)])
    # this pauses the data so the figure/axis can catch up - the amount of pause can be altered above
    plt.pause(pause_time)
    
    # return line so we can update it again in the next iteration
    return line1

關於上面function的幾點說明:

line1.set_ydata(y1_data) 也可以切換到 line1.set_data(x_vec,y1_data) 以更改繪圖上的 x 和 y 數據。

plt.pause() 是讓繪圖儀趕上所必需的 - 我已經能夠使用 0.01s 的暫停時間而沒有任何問題

用戶需要返回 line1 以控制線路,因為線路已更新並發送回 function

用戶還可以自定義 function 以允許動態更改標題、x-label、y-label、x-limits 等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM