Examples¶
Static slide¶
# -*-coding:Utf-8 -*
import numpy as np
# src
from mplotlab import App
from mplotlab.models import SourceExpression,\
Variable,\
Collection,\
Projection,\
Slide
# DATA MODEL
def makeSlide(source):
slide = Slide(
name = "slide",
title = "test title slide ",
)
projections = slide.get_projections()
# projection 1
projection = Projection(
name = "projection1",
xlabel = "xlabel projection 1 ",
ylabel = "ylabel projection 1 ",
collections = [],
xmin = 0.,
xmax = 3.,
ymin = -1. ,
ymax = 1.
)
projections.append(projection)
collections = projection.get_collections()
collections.append(Collection(
name = "collection1",
X = Variable(source=source),
Y = Variable(formula="sin(2*pi*T)"),
color = "blue",
linestyle = "-",
))
collections.append(Collection(
name = "collection2",
X = Variable(source=source),
Y = Variable(formula="sin(2*pi*(T-0.5))"),
color = "green",
linestyle = "--",
))
# projection 2
projection = Projection(
name = "projection2",
xlabel = "xlabel projection 2 ",
ylabel = "ylabel projection 2 ",
autolim = True,
collections = [],
xmin = 0.,
xmax = 3.,
ymin = np.exp(0),
ymax = np.exp(3)
)
projections.append(projection)
collections = projection.get_collections()
collections.append(Collection(
name = "collection3",
X = Variable(source=source),
Y = Variable(formula="tan(T)"),
color = "red",
linestyle = "-",
))
return slide
# Create the mplotlab application
app = App()
# the source is described by an numpy expression
sourceT= SourceExpression(name="T",expression="np.arange(0.0,3.0,0.1)")
slide = makeSlide(sourceT)
app.mainWin.showSlide(slide)
# GO :)
app.MainLoop()
The slide can be saved or loaded at user disposal. It is saved in an .xml format.
<container>
<MODELS parameter="Source">
<SourceExpression id="3" name="T" parameter="Source0">
<STRING parameter="expression">np.arange(0.0,3.0,0.1)</STRING>
<STRING parameter="name">T</STRING>
</SourceExpression>
</MODELS>
<MODELS parameter="Variable">
<Variable id="6" name="" parameter="Variable0">
<Source id="3" name="T" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula" />
</Variable>
<Variable id="7" name="" parameter="Variable1">
<Source id="0" name="" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula">sin(2*pi*T)</STRING>
</Variable>
<Variable id="9" name="" parameter="Variable2">
<Source id="3" name="T" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula" />
</Variable>
<Variable id="10" name="" parameter="Variable3">
<Source id="0" name="" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula">sin(2*pi*(T-0.5))</STRING>
</Variable>
<Variable id="13" name="" parameter="Variable4">
<Source id="3" name="T" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula" />
</Variable>
<Variable id="14" name="" parameter="Variable5">
<Source id="0" name="" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula">tan(T)</STRING>
</Variable>
</MODELS>
<MODELS parameter="Collection">
<Collection id="8" name="collection1" parameter="Collection0">
<STRING parameter="name">collection1</STRING>
<COLOR parameter="color">blue</COLOR>
<BOOL parameter="animation">0</BOOL>
<Variable id="7" name="" parameter="Y" />
<Variable id="6" name="" parameter="X" />
<STRING parameter="linestyle">-</STRING>
</Collection>
<Collection id="11" name="collection2" parameter="Collection1">
<STRING parameter="name">collection2</STRING>
<COLOR parameter="color">green</COLOR>
<BOOL parameter="animation">0</BOOL>
<Variable id="10" name="" parameter="Y" />
<Variable id="9" name="" parameter="X" />
<STRING parameter="linestyle">--</STRING>
</Collection>
<Collection id="15" name="collection3" parameter="Collection2">
<STRING parameter="name">collection3</STRING>
<COLOR parameter="color">red</COLOR>
<BOOL parameter="animation">0</BOOL>
<Variable id="14" name="" parameter="Y" />
<Variable id="13" name="" parameter="X" />
<STRING parameter="linestyle">-</STRING>
</Collection>
</MODELS>
<MODELS parameter="Projection">
<Projection id="5" name="projection1" parameter="Projection0">
<STRING parameter="name">projection1</STRING>
<BOOL parameter="autolim">0</BOOL>
<STRING parameter="xlabel">xlabel projection 1 </STRING>
<FLOAT parameter="xmax">3.0</FLOAT>
<STRING parameter="ylabel">ylabel projection 1 </STRING>
<FLOAT parameter="xmin">0.0</FLOAT>
<MODELS parameter="collections">
<Collection id="8" name="collection1" parameter="collections0" />
<Collection id="11" name="collection2" parameter="collections1" />
</MODELS>
<FLOAT parameter="ymin">-1.0</FLOAT>
<FLOAT parameter="ymax">1.0</FLOAT>
</Projection>
<Projection id="12" name="projection2" parameter="Projection1">
<STRING parameter="name">projection2</STRING>
<BOOL parameter="autolim">1</BOOL>
<STRING parameter="xlabel">xlabel projection 2 </STRING>
<FLOAT parameter="xmax">3.0</FLOAT>
<STRING parameter="ylabel">ylabel projection 2 </STRING>
<FLOAT parameter="xmin">0.0</FLOAT>
<MODELS parameter="collections">
<Collection id="15" name="collection3" parameter="collections0" />
</MODELS>
<FLOAT parameter="ymin">1.0</FLOAT>
<FLOAT parameter="ymax">20.0855369232</FLOAT>
</Projection>
</MODELS>
<MODELS parameter="Slide">
<Slide id="4" name="slide" parameter="Slide0">
<MODELS parameter="projections">
<Projection id="5" name="projection1" parameter="projections0" />
<Projection id="12" name="projection2" parameter="projections1" />
</MODELS>
<STRING parameter="name">slide</STRING>
<STRING parameter="title">test title slide </STRING>
</Slide>
</MODELS>
</container>
Dynamic slide¶
TCP/IP Server (to run first)
#!/usr/bin/env python
# coding: utf-8
import socket
import threading
import time
class DataThread(threading.Thread):
def __init__(self, clientsocket):
threading.Thread.__init__(self)
self.clientsocket = clientsocket
def run(self):
k=20000
t0 = time.time()
y = 0
while k>0:
print "waiting instructions..."
r = self.clientsocket.recv(2048)
print r
if r=="giveMeYourData":
x = time.time()-t0
data = "%f"%x
print "sending data"
self.clientsocket.send(data)
print "data sent"
time.sleep(0.005)
k=k-1
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind(("localhost", 50981))
print( "Listening...")
tcpsock.listen(10)
print( "Waiting for connection ...")
(clientsocket, (ip, port)) = tcpsock.accept()
newthread = DataThread(clientsocket)
print( "Starting DataThread ...")
newthread.start()
Slides that contain a dynamic socket source that listens to the server (to run after)
# -*-coding:Utf-8 -*
import numpy as np
# src
from mplotlab import App
from mplotlab.models import SourceSocket,\
Variable,\
Collection,\
Projection,\
Slide
# DATA MODEL
def makeSlide1(sourceT):
slide = Slide(
name = "slide1",
title = "slide1",
)
projections = slide.get_projections()
# projection 1
projection = Projection(
name = "projection1",
xlabel = "xlabel projection 1 ",
ylabel = "ylabel projection 1 ",
collections = [],
xmin = 0.0,
xmax = 15.0,
ymin = -1.4,
ymax = 1.4,
)
projections.append(projection)
collections = projection.get_collections()
collections.append(Collection(
name = "collection1",
animation=True,
X = Variable(source=sourceT),
Y = Variable(formula="sin(2*pi*T)"),
color = "blue",
linestyle = "-",
))
collections.append(Collection(
name = "collection2",
animation=True,
X = Variable(source=sourceT),
Y = Variable(formula="sin(2*pi*(T-0.5))"),
color = "green",
linestyle = "--",
))
return slide
def makeSlide2(sourceT):
slide = Slide(
name = "slide2",
title = "slide2",
)
projections = slide.get_projections()
projection = Projection(
name = "projection2",
xlabel = "xlabel projection 2 ",
ylabel = "ylabel projection 2 ",
collections = [],
xmin = 0.0,
xmax = 15.0,
ymin = -10.0 ,
ymax = 10.0,
)
projections.append(projection)
collections = projection.get_collections()
collections.append(Collection(
animation=True,
name = "collection3",
X = Variable(source=sourceT),
Y = Variable(formula="tan(T)"),
color = "red",
linestyle = "-",
))
return slide
app = App()
# Here, I create and configure a socket source that will enable a server communication.
# Then fetched data will update source values every 50ms (tweakable).
# Simultaneously, slide animation will update its artists every second (hardcoded value..)
sourceT= SourceSocket(name="T",
host="localhost",
port=50981,
buffsize=9999999,
period=50)
slide1 = makeSlide1(sourceT)
slide2 = makeSlide2(sourceT)
app.mainWin.showSlide(slide1)
app.mainWin.showSlide(slide2)
# GO :)
app.MainLoop()
Several slides can be saved or loaded at user disposal. For dynamic source like the socket source, only its configuration is saved.
<container>
<MODELS parameter="Source">
<SourceSocket id="3" name="T" parameter="Source0">
<STRING parameter="name">T</STRING>
<INT parameter="buffsize">9999999</INT>
<INT parameter="period">50</INT>
<STRING parameter="host">localhost</STRING>
<INT parameter="port">50981</INT>
</SourceSocket>
</MODELS>
<MODELS parameter="Variable">
<Variable id="6" name="" parameter="Variable0">
<Source id="3" name="T" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula" />
</Variable>
<Variable id="7" name="" parameter="Variable1">
<Source id="0" name="" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula">sin(2*pi*T)</STRING>
</Variable>
<Variable id="9" name="" parameter="Variable2">
<Source id="3" name="T" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula" />
</Variable>
<Variable id="10" name="" parameter="Variable3">
<Source id="0" name="" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula">sin(2*pi*(T-0.5))</STRING>
</Variable>
<Variable id="14" name="" parameter="Variable4">
<Source id="3" name="T" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula" />
</Variable>
<Variable id="15" name="" parameter="Variable5">
<Source id="0" name="" parameter="source" />
<STRING parameter="name" />
<STRING parameter="formula">tan(T)</STRING>
</Variable>
</MODELS>
<MODELS parameter="Collection">
<Collection id="8" name="collection1" parameter="Collection0">
<STRING parameter="name">collection1</STRING>
<COLOR parameter="color">blue</COLOR>
<BOOL parameter="animation">1</BOOL>
<Variable id="7" name="" parameter="Y" />
<Variable id="6" name="" parameter="X" />
<STRING parameter="linestyle">-</STRING>
</Collection>
<Collection id="11" name="collection2" parameter="Collection1">
<STRING parameter="name">collection2</STRING>
<COLOR parameter="color">green</COLOR>
<BOOL parameter="animation">1</BOOL>
<Variable id="10" name="" parameter="Y" />
<Variable id="9" name="" parameter="X" />
<STRING parameter="linestyle">--</STRING>
</Collection>
<Collection id="16" name="collection3" parameter="Collection2">
<STRING parameter="name">collection3</STRING>
<COLOR parameter="color">red</COLOR>
<BOOL parameter="animation">1</BOOL>
<Variable id="15" name="" parameter="Y" />
<Variable id="14" name="" parameter="X" />
<STRING parameter="linestyle">-</STRING>
</Collection>
</MODELS>
<MODELS parameter="Projection">
<Projection id="5" name="projection1" parameter="Projection0">
<STRING parameter="name">projection1</STRING>
<BOOL parameter="autolim">0</BOOL>
<STRING parameter="xlabel">xlabel projection 1 </STRING>
<FLOAT parameter="xmax">15.0</FLOAT>
<STRING parameter="ylabel">ylabel projection 1 </STRING>
<FLOAT parameter="xmin">0.0</FLOAT>
<MODELS parameter="collections">
<Collection id="8" name="collection1" parameter="collections0" />
<Collection id="11" name="collection2" parameter="collections1" />
</MODELS>
<FLOAT parameter="ymin">-1.4</FLOAT>
<FLOAT parameter="ymax">1.4</FLOAT>
</Projection>
<Projection id="13" name="projection2" parameter="Projection1">
<STRING parameter="name">projection2</STRING>
<BOOL parameter="autolim">0</BOOL>
<STRING parameter="xlabel">xlabel projection 2 </STRING>
<FLOAT parameter="xmax">15.0</FLOAT>
<STRING parameter="ylabel">ylabel projection 2 </STRING>
<FLOAT parameter="xmin">0.0</FLOAT>
<MODELS parameter="collections">
<Collection id="16" name="collection3" parameter="collections0" />
</MODELS>
<FLOAT parameter="ymin">-10.0</FLOAT>
<FLOAT parameter="ymax">10.0</FLOAT>
</Projection>
</MODELS>
<MODELS parameter="Slide">
<Slide id="4" name="slide1" parameter="Slide0">
<MODELS parameter="projections">
<Projection id="5" name="projection1" parameter="projections0" />
</MODELS>
<STRING parameter="name">slide1</STRING>
<STRING parameter="title">slide1</STRING>
</Slide>
<Slide id="12" name="slide2" parameter="Slide1">
<MODELS parameter="projections">
<Projection id="13" name="projection2" parameter="projections0" />
</MODELS>
<STRING parameter="name">slide2</STRING>
<STRING parameter="title">slide2</STRING>
</Slide>
</MODELS>
</container>