Examples

Static slide

_images/slide_static_example.png
# -*-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

_images/slide_dynamic_example.gif

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>