Algoritma Plotting untuk realtime system

Saya ingin plot data secara realtime dari suatu instrumen menggunakan python. Jadi saya read data sebanyak 2000 data dari instrumen dan saya simpen di array. Bagaimana cara plot 100 data dari array yang tersebut?? dan dapat bergeser secara realtime juga. saya pengen tau metode atau algortima seperti apa yang dibutuhkan dari python agar bisa plot setiap 100

avatar ajisapta
@ajisapta

1 Kontribusi 0 Poin

Diperbarui 6 tahun yang lalu

1 Jawaban:

Saya coba bantu ya@ajisapta

langsung saya kasih syntax pythonnya aja dibawah ya, pelajari nilai updatenya. array total saya 400 data (random).. nilai awalan saya 0 s/d 100 tp begitu geser scrollbar nilai bertambah satu point. tapi tampilan tetep per 100 data...sampe mencapai nilai maximumnya dengan kombinasi besaran scrollbar dan nilai update terakhir dari data. plottingnya pake grafik matplotlib. ini saya pake python 2.7.14, pastiin library python yg saya pake ini ada ya



from numpy import arange, sin, pi, float, size
import numpy
import matplotlib
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
from matplotlib.figure import Figure

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self,parent, id, 'PLOTTING DATA | TOTAL: 400 Data(random) | VIEW: per-100 Data' ,
                style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER,
                size=(800, 500))
        self.panel = wx.Panel(self, -1)

        self.fig = Figure((5, 4), 75)
        self.canvas = FigureCanvasWxAgg(self.panel, -1, self.fig)
        self.scroll_range = 400
        self.canvas.SetScrollbar(wx.HORIZONTAL, 0, 100,
                                 self.scroll_range)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas, -1, wx.EXPAND)
        self.panel.SetSizer(sizer)
        self.panel.Fit()

        self.init_data()
        self.init_plot()

        self.canvas.Bind(wx.EVT_SCROLLWIN, self.OnScrollEvt)

        print ""
        print "Realtime plotting muncul begitu 'OnScrollEvt'"
        print "-------------------------------------------------"

    def init_data(self):

        # Inisialsasi data:
        self.dt = 400 # total data array
        self.t = arange(0,self.dt) #  koordinat x (0 - 200)
        self.x = numpy.random.choice(400, 400) # 200 data random disusun random

        print ""
        print "Data t (Parameter): \n", "----------------------\n", self.t
        print ""
        print "Data x (besaran nilai per 1 value): \n", "--------------------------------------\n", self.x

        # Ukuran data dari 0 s/d variabel 'self.t':
        self.i_min = 0
        self.i_max = len(self.t)

        # Ukuran limit plot kanvas yang akan ditampilkan:
        self.i_window = 100

        # Interval data
        self.i_start = 0
        self.i_end = self.i_start + self.i_window

    def init_plot(self): # figure matplotlib ikut bergeser bareng scrollbar
        self.axes = self.fig.add_subplot(111)
        self.plot_data = \
                  self.axes.plot(self.t[self.i_start:self.i_end],
                                 self.x[self.i_start:self.i_end])[0]

    def draw_plot(self):

        # Memasukan nilai dari array ke plot:
        self.plot_data.set_xdata(self.t[self.i_start:self.i_end])
        self.plot_data.set_ydata(self.x[self.i_start:self.i_end])

        # penyesuaian Limit plot:
        self.axes.set_xlim((min(self.t[self.i_start:self.i_end]),
                           max(self.t[self.i_start:self.i_end])))
        self.axes.set_ylim((min(self.x[self.i_start:self.i_end]),
                            max(self.x[self.i_start:self.i_end])))

        # Fungsi ,menggambar (ini bagian realtime drawingnya):
        self.canvas.draw()

    def OnScrollEvt(self, event):

     # Update data plot tiap kali scroll bergeser:
        self.i_start = self.i_min + event.GetPosition()
        self.i_end = self.i_min + self.i_window + event.GetPosition()
        self.draw_plot()

        # kalo mau rubah nilai array perhatikan jumlah total dan nilai besaran
        # scrollbar di 'self.canvas.SetScrollbar' di kelas MyFrame berpengaruh
        # pengaruh sama value plottingnya disitu nilai besaran scrollbar saya 100
        # jelasnya liat ini (ini nilai relasi scrollbar sma plottingnya):
        print event.GetPosition(), "+ 100 =", ((event.GetPosition()) + 100)

class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(parent=None,id=-1)
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True


if __name__ == '__main__':
    app = MyApp()
    app.MainLoop()


Hasil console: ![](https://s10.postimg.org/5x78lifjt/console.jpg https://s10.postimg.org/45e9qm3wp/console2.jpg)

Hasil Plotting: ![](https://s10.postimg.org/3smvkftcp/hasil.jpg https://s10.postimg.org/h9ju3bbe1/hasil2.jpg)

avatar arga135
@arga135

2 Kontribusi 1 Poin

Dipost 6 tahun yang lalu

Login untuk ikut Jawaban