Basic Plotting in Python using Matplotlib

Modules - Basics

Last edited: March 11th 2018


The following is a brief introduction to plotting in Python, using the library matplotlib. From the matplotlib home page: "matplotlib tries to make easy things easy and hard things possible. (...) For simple plotting the pyplot interface provides a MATLAB-like interface, particularly when combined with IPython." Since this is written in IPython Notebook, pyplot is a natural first choice. Let's get started!

In [1]:
import numpy as np
from matplotlib import pyplot as plt

Above we have imported numpy, a package for scientific computing with Python, and pyplot. pyplot is part of matplotlib, as seen from how it is imported. Alternatively, it could be imported as follows

In [2]:
import matplotlib.pyplot as plt

Also, notice how we have given shorter nicknames to both the numpy and pyplot import, in order to save some typing. Finally, we want to display the plots in the Notebook, not in an external window. To do this we use the command

In [3]:
%matplotlib inline

Plotting a Function

The task:

How to plot a function $f$, given $$y=f(x)$$ along an interval $$x=[a,b].$$

The Method:

Two steps are required in the code:

  1. We need to define the range for $x$.
  2. We use the $plt.plot$ command in which the function is defined.

Example:

We would like to plot the function $$f(x)=3x^2+x-1$$ for the interval $$x=[-1,2].$$

Step 1: Defining the range of $x$

In the Python code, we use the command

In [4]:
x = np.linspace(-1, 2, 301)

This creates an array of $301$ linearly spaced, discrete values of x between $-1$ and $2$.

Step 2: Using the $plot$ command

The $plt.plot$ command allows us to plot the function.

We need to specify the variable which is represented by the horizontal axis. It is mentioned first in the plot command.

The second expression represents the function, corresponding to the vertical axis. In our case, we need to write

In [5]:
plt.plot(x, 3*x**2+x-1);

Further Steps: Adding axes labels, a legend, a plot title, etc.

One option is to add axes labels, a legend, a title, a grid etc. to the plot by using the following commands:

In [6]:
plt.plot(x, 3*x**2+x-1)
plt.ylabel(r'$f(x)$')                  # label on y-axis
plt.xlabel(r'$x$')                     # label on x-axis
plt.title(r'Plot of $f(x)=3x^2+x-1$')  # plot title
plt.legend([r'$f(x)$'],loc=4)          # legend, loc gives location of the legend
plt.grid();                            # grid

Comment and uncomment the various commends to see how they effect the plot.

You can also change the size of the figure quickly by using the following command:

In [10]:
plt.figure(figsize=(16, 8))            # create figure and change size
plt.plot(x, 3*x**2+x-1)
plt.ylabel(r'$f(x)$')                  # label on y-axis
plt.xlabel(r'$x$')                     # label on x-axis
plt.title(r'Plot of $f(x)=3x^2+x-1$')  # plot title
plt.legend([r'$f(x)$'], loc=2)         # legend
plt.grid();                            # grid

The $plt.figure()$ command also lets you set other parameters related to the figure. In most of the other modules and examples, we have set common figure parameters in the beginning of the module/example, by using the following lines of code:

In [11]:
from matplotlib import rc
# Set common figure parameters:
newparams = {'axes.labelsize': 11, 'axes.linewidth': 1, 'savefig.dpi': 300, 
             'lines.linewidth': 1.0, 'figure.figsize': (8, 3),
             'ytick.labelsize': 10, 'xtick.labelsize': 10,
             'ytick.major.pad': 5, 'xtick.major.pad': 5,}
plt.rcParams.update(newparams)

Multiple Functions in One Plot

Let us plot $$g(x)=3x^3+1$$ in addition to our previous function:

In [12]:
plt.plot(x, 3*x**2+x-1, x, 3*x**3+1);

We need to make clear what graph corresponds to what function! We do this using the $legend()$ command:

In [13]:
plt.plot(x, 3*x**2+x-1, x, 3*x**3+1)
# Create legend, and change legend location using "loc"
plt.legend([r'$f(x)$',r'$g(x)$'], loc=2);

This makes things easier to track.

Final Note

There are many more commands and options for plotting functions than presented in this module. However, we covered the most important ones.

We need to use the matplotlib and pyplot online references when additional plotting features are required.