# Xtralien Scientific Python: Plotting with matplotlib

In Python you typically plot data using the matplotlib library. This tutorial shows you how to make a simple plot and customise it for presentation.

matplotlib is a library that allows for easy plotting of data in Python.

x = [1, 2, 3, 4, 5]
y = [3, 5, 7, 8, 9]

figure()
plot(x, y)
show()

Note: figure() and show() are optional in the Xtralien Scientific Python, however they are recommended as they are explicit and can show you where your figure starts and ends.

The above example shows the most common plot, the line plot. the plot function takes a list of x values, and a list of y values. These two lists should be equal in length as they will be matched to each other when plotting, e.g. (1, 3), (2, 5).

The figure function defines the start of a new figure

By default the plot will extend to the beginning and end of the plot.

## Multiple plots

Sometimes it is useful to plot multiple lines on a graph to compare series of data. Because matplotlib stores previous graphs until you clear the figure (using clf), it is possible to plot multiple graphs on the same figure by repeating the plot command.

# x values
x = [1, 2, 3, 4, 5]
# First y series
y1 = [1, 2, 3, 4, 5]
# Second y series
y2 = [1, 4, 9, 16, 25]

# Plot everything
figure()
plot(x, y1)
plot(x, y2)
show()

The code above will produce a plot with two lines for each of the different plots. These are different colours to easily differentiate the two.

Note: The x does not need to be shared as the graph will expand to fit the largest plot. However the x and y lists for each indiviual plot need to be the same size.

It is possible to further customise your plot to make it easier to interpret, or to stylise your results.

Adding a title is useful when creating figures that you plan to publish, or simply to explain at a glance what the plot shows. The function that matplotlib contains to do this is title. To use title you just pass the string you wish to use as the title.

x = [1, 2, 3, 4, 5]
y = [3, 5, 7, 8, 9]

figure()
plot(x, y)
title("2x + 1")
show()

To add a label to an axis you can use the xlabel and ylabel functions in matplotlib. These will add a labels to each relevant axis. Both of these functions take a string that will be used as the relevant axis label.

x = [1, 2, 3, 4, 5]
y = [3, 5, 7, 9, 11]

figure()
plot(x, y)
xlabel('x')
ylabel('y')
show()

To add a grid in matplotlib you simply need to use the grid function. This function takes two optional arguments, major and minor, which refer to the major and minor gridlines respectively.

By default major is True and minor is False, resulting in a grid that shows the major gridlines.

x = [1, 2, 3, 4, 5]
y = [3, 5, 7, 9, 11]

figure()
plot(x, y)
grid(major=True, minor=False)
show()

#### Changing Scale

When plotting using matplotlib most plots will either use a linear scale, or logarithmic scale. Depending on the effect that you are investigating both may be of interest.

The easiest method of changing the scale is through the use of the xscale and yscale functions. Both work similarily and take a string as an argument.

To change the y axis scale to linear mode you would use yscale('linear'), and to change the scale to a logarithmic scale you would use yscale('log').

x = [1, 2, 3, 4, 5]
y = [1e1, 1e2, 1e3, 1e4, 1e5]

# Linear plot
figure()
plot(x, y)
yscale('linear')
show()

#
figure()
plot(x, y)
yscale('log')
show()

#### Changing axis limits

Axis limits are customisable for each plot, and can be changed by providing the minimum and maximum values for each of the limits respectively.

You can use the xlim and ylim functions for this purpose. An example of when you would want to do this is if you wish to focus on a specific point, such as a point of intersection between two lines.

# x values
x = [1, 2, 3, 4, 5]
# First y series
y1 = [1, 2, 3, 4, 5]
# Second y series
y2 = [1, 4, 9, 16, 25]

# Plot everything
figure()
plot(x, y1)
plot(x, y2)
# Set the limits
xlim(2, 3)
ylim(5, 6)
# Show the plot
show()

#### Creating a legend

It is possible to create a legend in matplotlib by using the legend function. This function creates a legend in a corner of the plot.

To label this legend you need to supply a label to every plot that you create. label is a string, and will appear next to the line in the legend.

# x values
x = [1, 2, 3, 4, 5]
# First y series
y1 = [1, 2, 3, 4, 5]
# Second y series
y2 = [1, 4, 9, 16, 25]

# Plot everything
figure()
plot(x, y1, label="2x + 1")
plot(x, y2, label="x*x")
show()