Plotvar : The developer corner - Python pylab tutorial

Python plot generator

Here's a tiny code to help you if you want to generate graphs in python :

#!/usr/bin/env python

# We use pylab !
import pylab

# x axis values
t = [1, 2, 3, 4, 5]

# y axis values
s = [2, 8, 4, 1, 6]
pylab.plot(t, s)

pylab.xlabel('time (s)')
pylab.ylabel('voltage (mV)')
pylab.title('Sample title')
pylab.grid(True)

# export as a png file 
pylab.savefig('python-plot')

pylab.show()


Then the picture generated :

create a plot python pylab

Python tk live plot

Let's start another test with user interface (tk).

import time
import pylab
from Tkinter import *
from PIL import Image, ImageTk
import random 

root = Tk()

# Consts
interface = 0 
t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
v = [0, 50, 5, 10, 60, 75, 15, 22, 35, 45] 

def export_plot(t, v): 
  print t
  print v
  pylab.plot(t, v)
  pylab.xlabel('time (s)')
  pylab.ylabel('air quality')
  pylab.ylim([0,100])
  pylab.title('IAQ AIR MONITOR')
  pylab.grid(True)
  pylab.savefig('plot')
  pylab.show()
  pylab.close()

def update_img():
  img = ImageTk.PhotoImage(Image.open('plot.png'))
  try:
    if root.img_label.winfo_ismapped():
      root.img_label.pack_forget()
  except: 
    pass
  root.img_label = Label(root, image=img)
  root.img_label.img = img 
  root.img_label.pack()
  root.update()

dev = None

def get_values(): 
  root.after(1000, get_values)
  val = random.random() * 100 
  v.pop(0)
  v.append(val)
  export_plot(t, v)
  update_img()
  time.sleep(1)

get_values()
root.mainloop()


This is a bit kludgy that's true.

You need to write a buffer instead of using an export...

Here a kind of output that you can obtain (for real it's live chart not a picture) :

live plot with pylab and python tk