Life after matplotlib:
Harder, better, faster, stronger
Kayla Iacovino
http://code.google.com/p/avoplot
A brief history of me.
A brief history of me.
A brief history of me.
It all started with a bang...
...and a rather chilly garage
Data Problems
+
Existing Python tools
● Aims
● Design
● Current state
● Future
=
Science in a nutshell.
Data
Import
Processing
Visualisation
What is the problem?
● Need general tools that can be
specialised for the task at hand.
● Specialisations should be easily
reusable.
Python solves all?
Data
Import
Processing
Visualisation
● xlrd
● NumPy
● csv
● Pandas
● SciPy
● NumPy
● matplotlib
What is the real problem?
● Scientists are not (usually)
programmers.
● Scientists are usually in a hurry.
● Scientists are stupid (outside of
their field).
● Scripting is a frustrating way to
achieve visualisation tasks.
AvoPlot: Aims
● Graphical frontend to matplotlib.
● Graphical import of common data
formats (txt, csv, xls etc.).
● Basic data processing capabilities.
● Drag and drop replacement for
matplotlib's pyplot interface.
● Easily customisable.
● Framework for scientists to create
GUIs for their processing tools.
AvoPlot: Aims 2
GUI interface for easy
data visualisation
Plugins mean AvoPlot is
versatile – and extensible!
Powered by Python with a
powerful scripting interface
Anatomy of AvoPlot
“Open-source software is written by a
bunch of hippies living in a commune in
Palo Alto. With their beards down to their
socks and sandals, living on nothing but
organic avocados. Look at me, I am so
moral.”
- Talfan Barnie, 2010 (somewhere in Ethiopia)
But what has this got to do with 
avocados?
import matplotlib.pyplot as plt
import numpy
xdata = numpy.linspace(0, 7, 500)
ydata = numpy.cos(xdata)
plt.plot(xdata, ydata, 'r-')
plt.show() import avoplot.pyplot as plt
import numpy
xdata = numpy.linspace(0, 7, 500)
ydata = numpy.cos(xdata)
plt.plot(xdata, ydata, 'r-')
plt.show()
Scripting interface
Plugins
● Python module or Python package
● Allow import of new data types, and
provision of new manipulation or
processing tools.
● Distributed with distutils.
● Highly integrated with the GUI.
FTIR Plugin
#define new data series type for FTIR data
class FTIRSpectrumData(series.XYDataSeries):
def __init__(self, *args, **kwargs):
super(FTIRSpectrumData, self).__init__(*args, **kwargs)
self.add_control_panel(BackgroundCalcCtrl(self))
@staticmethod
def get_supported_subplot_type():
return FTIRSpectrumSubplot
class FTIRPlugin(plugins.AvoPlotPluginSimple):
def __init__(self):
super(FTIRPlugin, self).__init__("FTIR Plugin", FTIRSpectrumData)
self.set_menu_entry(['FTIR', 'New Spectrum'], "Plot an FTIR spectrum")
AvoPlot: the future
X Y
0.3 0.296
0.4 0.389
0.5 0.479
0.6 0.565
0.7 0.644
0.8 0.767
0.9 0.783
1.0 0.841
1.1 0.891
1.2 0.932
Overview/Conclusions
● It works (sort of).
● It's useful (at least we think so).
● More developers are needed!
Questions
http://code.google.com/p/avoplot

Life after Matplotlib: Harder, Better, Faster, Stronger by Kayla Lacovino