In this tutorial, we will see basic syntax of producing plots for data visualization using the matplotlib
module. matplotlib
and seaborn
are widely used for basic data visualization. seaborn
actually uses the underlying functionalities of the matplotlib
module for more beautiful less code-oriented visualizations.
Let’s first import the module like this
import matplotlib.pyplot as plt
If you are using the Jupyter Notebook
, also add the following:
# Only for jupyter notebook
%matplotlib inline
Plotting
Basic Plotting
The simplest way of plotting $(x,y)$-values is to use matplotlib.pyplot.plot(x,y)
. I have added the labels and titles here as well.
x = [1,2,3,4,5]
y = [1,4,9,16,25]
plt.plot(x, y, 'black')
plt.xlabel('Write your X-label')
plt.ylabel('Write your Y-label')
plt.title('Write your plot title')
plt.show()
Basic Subplotting
The most basic subplotting can be visualized using the subplot allocation and numbering. $(1,2,1)$ means the subplot has allocation for one row (first value) and two columns (second value) (that means two subplots possible) where the last value defines the first column.
x = [1,2,3,4,5]
y1 = [1,4,9,16,25]
y2 = [1,8,27,64,125]
plt.subplot(1,2,1)
plt.plot(x, y1, 'r+-')
plt.subplot(1,2,2)
plt.plot(x, y2, 'g*-');
Similarly, if you want to have three subplots in one row:
x = [1,2,3,4,5]
y1 = [1,4,9,16,25]
y2 = [1,8,27,64,125]
y3 = [2,4,6,8,10]
plt.subplot(1,3,1)
plt.plot(x, y1, 'ro-')
plt.subplot(1,3,2)
plt.plot(x, y2, 'g*-')
plt.subplot(1,3,3)
plt.plot(x, y3, 'b+-');
Plotting using plt.figure()
class
Basic Plotting
You can create a basic plot object by using the matplotlib.pyplot.figure()
class.
fig = plt.figure()
# define axes in this format:
# [x0, y0, width, height] (range 0 to 1)
axes = fig.add_axes([0, 0, 1, 1])
# Plot on that set of axes
axes.plot(x, y, 'ro-')
axes.set_xlabel('Set X-label')
axes.set_ylabel('Set y-label')
axes.set_title('Write your title');
Inset Plotting
You can generate an inset plot by defining the axes value for the second plot.
fig = plt.figure()
axes1 = fig.add_axes([0, 0, 1, 1]) # larger axes
axes2 = fig.add_axes([0.65, 0.25, 0.25, 0.2]) # inset axes
axes1.plot(x, y1, 'b*-')
axes1.set_xlabel('X label')
axes1.set_ylabel('Y label')
axes1.set_title('Axes 1 Title')
axes2.plot(x, y2, 'r+-')
axes2.set_xlabel('X label')
axes2.set_ylabel('Y label')
axes2.set_title('Axes 2 Title');
Automatic Subplots
The matplotlib.pyplot.subplots()
object can assign automatic subplots.
# Automatic fig and axes
fig, axes = plt.subplots()
axes.plot(x, y, 'r')
axes.set_xlabel('X label')
axes.set_ylabel('Y label')
axes.set_title('title');
You can define the number of rows and columns under nrows
and ncols
parameters while creating objects.
fig, axes = plt.subplots(nrows=1, ncols=3)
yList = [y1,y4,y5]
for roy,j in zip(axes,yList):
roy.plot(x, j, 'b')
roy.set_xlabel('X label')
roy.set_ylabel('Y label')
roy.set_title('title')
Other Customizations
Custom Figure Size
You can define custom figure size using the figsize
parameter. The length and height values are defined inside a tuple.
fig, axes = plt.subplots(figsize=(15,5))
axes.plot(x, y, 'g')
axes.set_xlabel('X label')
axes.set_ylabel('Y label')
axes.set_title('title')
plt.show()
Save a Figure
Save a figure using the <fig_obj>.savefig()
method
fig.savefig("thisistest.png", dpi=300)
Multiple Plots in one figure
In the following example, multiple plots has been be drawn using <axes_obj>.plot()
method multiple times.
fig = plt.figure()
axes = fig.add_axes([0,0,1,1])
axes.plot(x, y1)
axes.plot(x, y2)
plt.show()
Title
Use <axes_obj>.set_title()
method to set the title of the plot
fig = plt.figure()
axes = fig.add_axes([0,0,1,1])
axes.plot(x, y1)
axes.plot(x, y2)
ax.set_title("write your title")
plt.show()
Legends
The legend is defined by providing a name to the label
option.
fig = plt.figure()
axes = fig.add_axes([0,0,1,1])
axes.plot(x, y1, label="sin(x)")
axes.plot(x, y2, label="cos(x)")
axes.legend()
plt.show()
Legend locations can be set like this
ax.legend(loc=0) # optimal location
ax.legend(loc=1) # upper right corner
ax.legend(loc=2) # upper left corner
ax.legend(loc=3) # lower left corner
ax.legend(loc=4) # lower right corner
More customization is possible using the bbox_to_anchor
option. For example, to put the legend-box outside right top, you can use the following code:
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
Axis Labels
Use <axes_obj>.set_xlabel()
and <axes_obj>.set_ylabel()
to set axis labels in $x$ and $y$ directions, respectively.
fig = plt.figure()
axes = fig.add_axes([0,0,1,1])
axes.plot(x, y1)
axes.plot(x, y2)
axes.set_xlabel("x")
axes.set_ylabel("y")
plt.show()
Colors
fig, ax = plt.subplots()
axes.plot(x, y1, 'b.-') # blue dotted line
axes.plot(x, y2, 'g--') # green dashed line
Also, color
parameter is available to set custom color hex codes
axes.plot(x, y1, color="#7a7a7a")
axes.plot(x, y2, color="#FFC98A")
Line Width
Line width can be set using the lw
parameter.
fig, ax = plt.subplots()
axes.plot(x, y1, lw=3,'b.-')
axes.plot(x, y2, lw=3,'g--')
Line Style
Use ls
parameter to define a custom line style
fig, ax = plt.subplots()
axes.plot(x, y1,ls='-')
axes.plot(x, y2,ls='--')
Custom Marker
Use custom marker using the marker
parameter.
fig, ax = plt.subplots()
axes.plot(x, y1, color="blue", lw=3, ls='-', marker='+')
axes.plot(x, y2, color="blue", lw=3, ls='--', marker='o')
Scaling
Use logarithmic scales for large difference values
fig, axes = plt.subplots(1, 2, figsize=(10,4))
axes[0].plot(x, x**3, x, np.exp(x))
axes[0].set_title("Regular scale")
axes[1].plot(x, x**3, x, np.exp(x))
axes[1].set_yscale("log")
axes[1].set_title("Logarithmic scale (y)");
Styling
You can use styles for different looking plots. Simply check the available styles using the following command
print(plt.style.available)
You can find the styles names as follows:
['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']
Now, check all styles using a loop:
import math
n = len(plt.style.available)
num_rows = math.ceil(n/4)
fig = plt.figure(figsize=(15, 15))
for i, s in enumerate(plt.style.available):
with plt.style.context(s):
ax = fig.add_subplot(num_rows, 4, i+1)
for i in range(1, 4):
ax.plot(x, i * x**2, label='Group %d' % i)
ax.set_xlabel(s, color='black')
ax.legend(loc='best')
fig.tight_layout()
plt.show()
In this post, I tried to cover basic plotting using the matplotlib
module. So far, we have learnt how to draw line charts. In the next tutorial, we will learn other plots, for example, bar plots, pie plots, scatter plots, and others.
For accessing all data science in python
related posts, check this post:
Collection of Data Science in Python
Posts in my Blog.
Thanks for your patience. Have a good day!
Leave a comment