Through the magic extension system described in sec. 6.1, IPython incorporates a mechanism for conveniently interfacing with the Gnuplot system (http://www.gnuplot.info). Gnuplot is a very complete 2D and 3D plotting package available for many operating systems and commonly included in modern Linux distributions.
Besides having Gnuplot installed, this functionality requires the Gnuplot.py module for interfacing python with Gnuplot. It can be downloaded from: http://gnuplot-py.sourceforge.net.
'Out of the box', Gnuplot is configured with a rather poor set of size, color and linewidth choices which make the graphs fairly hard to read on modern high-resolution displays (although they work fine on old 640x480 ones). Below is a section of my .Xdefaults file which I use for having a more convenient Gnuplot setup. Remember to load it by running `xrdb .Xdefaults`:
!******************************************************************
! gnuplot options
! modify this for a convenient window size
gnuplot*geometry: 780x580
! on-screen font (not for PostScript)
gnuplot*font: -misc-fixed-bold-r-normal-15-120-100-100-c-90-iso8859-1
! color options
gnuplot*background: black
gnuplot*textColor: white
gnuplot*borderColor: white
gnuplot*axisColor: white
gnuplot*line1Color: red
gnuplot*line2Color: green
gnuplot*line3Color: blue
gnuplot*line4Color: magenta
gnuplot*line5Color: cyan
gnuplot*line6Color: sienna
gnuplot*line7Color: orange
gnuplot*line8Color: coral
! multiplicative factor for point styles
gnuplot*pointsize: 2
! line width options (in pixels)
gnuplot*borderWidth: 2
gnuplot*axisWidth: 2
gnuplot*line1Width: 2
gnuplot*line2Width: 2
gnuplot*line3Width: 2
gnuplot*line4Width: 2
gnuplot*line5Width: 2
gnuplot*line6Width: 2
gnuplot*line7Width: 2
gnuplot*line8Width: 2
IPython includes a module called Gnuplot2.py which extends and improves the default Gnuplot.py (which it still relies upon). For example, the new plot function adds several improvements to the original making it more convenient for interactive use, and hardcopy fixes a bug in the original which under some systems makes the resulting PostScript files not be created.
For scripting use, GnuplotRuntime.py is provided, which wraps Gnuplot2.py and creates a series of global aliases. These make it easy to control Gnuplot plotting jobs through the Python language.
Below is some example code which illustrates how to configure Gnuplot inside your own programs but have it available for further interactive use through an embedded IPython instance. Simply run this file at a system prompt. This file is provided as example-gnuplot.py in the examples directory:
#!/usr/bin/env python """ Example code showing how to use Gnuplot and an embedded IPython shell. """ from Numeric import * from IPython.numutils import * from IPython.Shell import IPShellEmbed # Arguments to start IPython shell with. Load numeric profile. ipargs = ['-profile','numeric'] ipshell = IPShellEmbed(ipargs) # Compute sin(x) over the 0..2pi range at 200 points x = frange(0,2*pi,npts=200) y = sin(x) # In the 'numeric' profile, IPython has an internal gnuplot instance: g = ipshell.IP.gnuplot # Change some defaults g('set style data lines') # Or also call a multi-line set of gnuplot commands on it: g(""" set xrange [0:pi] # Set the visible range to half the data only set title 'Half sine' # Global gnuplot labels set xlabel 'theta' set ylabel 'sin(theta)' """) # Now start an embedded ipython. ipshell('Starting the embedded IPyhton.\n' 'Try calling plot(x,y), or @gpc for direct access to Gnuplot"\n') #********************** End of file <example-gnuplot.py> *********************
The numeric IPython profile, which you can activate with 'ipython -p numeric' will automatically load the IPython Gnuplot extensions (plus Numeric and other useful things for numerical computing), contained in the IPython.GnuplotInteractive module. This will create the globals Gnuplot (an alias to the improved Gnuplot2 module), gp (a Gnuplot active instance), the new magic commands @gpc and @gp_set_instance and several other convenient globals. Type gphelp() for further details.
This should turn IPython into a convenient environment for numerical computing, with all the functions in the NumPy library and the Gnuplot facilities for plotting. Further improvements can be obtained by loading the SciPy libraries for scientific computing, available at http://scipy.org.
If you are in the middle of a working session with numerical objects and need to
plot them but you didn't start the numeric profile, you can load these
extensions at any time by typing
from GnuplotInteractive import *
at the IPython prompt. This will allow you to keep your objects intact and start
using Gnuplot to view them.