Postingan lainnya
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
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)