DMelt:Plots/Real-Time Data

From HandWiki
Member


Showing real-time data

All canvas can be used to show data updated in real time. As example, we show how to display a random points, updating the data every 100 ms. Note that we use the method "clearData()", which reloads data container but does not change its graphical attributes. A slower method is "clearAll()" which reloads graphical attributes of the canvas.

from java.awt import Color
from java.util import Random
from java.lang  import Thread
from jhplot  import HPlot,H1D
import time

c1 = HPlot("Canvas",600,400)
c1.setGTitle("Histogram from stream of data (in real time)")
c1.visible(1)
c1.setLegend(0)
#c1.setAutoRange()
c1.setRange(-3,3,0,30)

h1 = H1D("Gaussian numbers every 0.5 sec",20, -2.0, 2.0)
h1.setFill(1)
h1.setErrX(0)
h1.setErrY(1)
h1.setFillColorTransparency(0.7)
h1.setFillColor(Color.blue)
h1.setColor(Color.blue)
h1.setPenWidthErr(2)

rand = Random()
for i in range(100):
        h1.fill(rand.nextGaussian())
        time.sleep(0.1)
        c1.draw(h1)

c1.drawStatBox(h1)
time.sleep(0.5)
#c1.clearData()


The output is shown here:

DMelt example: Histogram filled in real time from a stream of data




You can also use a lighter canvas, "SPlot", which is much simpler and requires less resources.


DataMelt has a special canvas called jhplot.HPlotRT jhplot.HPlotRT which is designed to show data in real time and fast dynamic rendering. Look at this code:

from jhplot import *
from java.awt import Color
from java.util import Random
from info.monitorenter.gui.chart.traces import Trace2DSimple
import time
 
trace = Trace2DSimple()
c1 = HPlotRT("Canvas")
 
trace1 = Trace2DSimple("Trace1")
trace1.setColor(Color.red)
c1.add(trace1)
 
trace2 = Trace2DSimple("Trace2")
c1.add(trace2)
 
rand = Random()
for i in range(100):
          time.sleep(0.05)
          trace1.addPoint(i,rand.nextGaussian())
          trace2.addPoint(i, 5+rand.nextGaussian())

The output image is below:

DMelt example: Showing real-time data using traces