Data Visualization using Matplotlib Python

Hello all,

This is the fifth article in the series Python for Data Science. If you are new to this series, we would recommend you to read our previous articles

  1. Python for Data Science Series - Part 1
  2. Python for Data Science Series - Part 2
  3. Using Numpy in Python
  4. Using Pandas in Python


To install matplotlib in your python environment, please use the below command

pip install matplotlib


Please refer the videos below for detailed explanation on matplotlib


After you have installed Matplotlib, please refer the following notebook to understand on how to use its  functionalities.




In [1]:
#import matplotlib
import matplotlib.pyplot as plt
import numpy as np
In [2]:
# Data for plotting
t = np.arange(0.0, 2.0, 0.01)
t
Out[2]:
array([0.  , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1 ,
       0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2 , 0.21,
       0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3 , 0.31, 0.32,
       0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4 , 0.41, 0.42, 0.43,
       0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5 , 0.51, 0.52, 0.53, 0.54,
       0.55, 0.56, 0.57, 0.58, 0.59, 0.6 , 0.61, 0.62, 0.63, 0.64, 0.65,
       0.66, 0.67, 0.68, 0.69, 0.7 , 0.71, 0.72, 0.73, 0.74, 0.75, 0.76,
       0.77, 0.78, 0.79, 0.8 , 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87,
       0.88, 0.89, 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,
       0.99, 1.  , 1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 1.08, 1.09,
       1.1 , 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.2 ,
       1.21, 1.22, 1.23, 1.24, 1.25, 1.26, 1.27, 1.28, 1.29, 1.3 , 1.31,
       1.32, 1.33, 1.34, 1.35, 1.36, 1.37, 1.38, 1.39, 1.4 , 1.41, 1.42,
       1.43, 1.44, 1.45, 1.46, 1.47, 1.48, 1.49, 1.5 , 1.51, 1.52, 1.53,
       1.54, 1.55, 1.56, 1.57, 1.58, 1.59, 1.6 , 1.61, 1.62, 1.63, 1.64,
       1.65, 1.66, 1.67, 1.68, 1.69, 1.7 , 1.71, 1.72, 1.73, 1.74, 1.75,
       1.76, 1.77, 1.78, 1.79, 1.8 , 1.81, 1.82, 1.83, 1.84, 1.85, 1.86,
       1.87, 1.88, 1.89, 1.9 , 1.91, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97,
       1.98, 1.99])
In [3]:
np.sin(2 * np.pi * t)
Out[3]:
array([ 0.00000000e+00,  6.27905195e-02,  1.25333234e-01,  1.87381315e-01,
        2.48689887e-01,  3.09016994e-01,  3.68124553e-01,  4.25779292e-01,
        4.81753674e-01,  5.35826795e-01,  5.87785252e-01,  6.37423990e-01,
        6.84547106e-01,  7.28968627e-01,  7.70513243e-01,  8.09016994e-01,
        8.44327926e-01,  8.76306680e-01,  9.04827052e-01,  9.29776486e-01,
        9.51056516e-01,  9.68583161e-01,  9.82287251e-01,  9.92114701e-01,
        9.98026728e-01,  1.00000000e+00,  9.98026728e-01,  9.92114701e-01,
        9.82287251e-01,  9.68583161e-01,  9.51056516e-01,  9.29776486e-01,
        9.04827052e-01,  8.76306680e-01,  8.44327926e-01,  8.09016994e-01,
        7.70513243e-01,  7.28968627e-01,  6.84547106e-01,  6.37423990e-01,
        5.87785252e-01,  5.35826795e-01,  4.81753674e-01,  4.25779292e-01,
        3.68124553e-01,  3.09016994e-01,  2.48689887e-01,  1.87381315e-01,
        1.25333234e-01,  6.27905195e-02,  1.22464680e-16, -6.27905195e-02,
       -1.25333234e-01, -1.87381315e-01, -2.48689887e-01, -3.09016994e-01,
       -3.68124553e-01, -4.25779292e-01, -4.81753674e-01, -5.35826795e-01,
       -5.87785252e-01, -6.37423990e-01, -6.84547106e-01, -7.28968627e-01,
       -7.70513243e-01, -8.09016994e-01, -8.44327926e-01, -8.76306680e-01,
       -9.04827052e-01, -9.29776486e-01, -9.51056516e-01, -9.68583161e-01,
       -9.82287251e-01, -9.92114701e-01, -9.98026728e-01, -1.00000000e+00,
       -9.98026728e-01, -9.92114701e-01, -9.82287251e-01, -9.68583161e-01,
       -9.51056516e-01, -9.29776486e-01, -9.04827052e-01, -8.76306680e-01,
       -8.44327926e-01, -8.09016994e-01, -7.70513243e-01, -7.28968627e-01,
       -6.84547106e-01, -6.37423990e-01, -5.87785252e-01, -5.35826795e-01,
       -4.81753674e-01, -4.25779292e-01, -3.68124553e-01, -3.09016994e-01,
       -2.48689887e-01, -1.87381315e-01, -1.25333234e-01, -6.27905195e-02,
       -2.44929360e-16,  6.27905195e-02,  1.25333234e-01,  1.87381315e-01,
        2.48689887e-01,  3.09016994e-01,  3.68124553e-01,  4.25779292e-01,
        4.81753674e-01,  5.35826795e-01,  5.87785252e-01,  6.37423990e-01,
        6.84547106e-01,  7.28968627e-01,  7.70513243e-01,  8.09016994e-01,
        8.44327926e-01,  8.76306680e-01,  9.04827052e-01,  9.29776486e-01,
        9.51056516e-01,  9.68583161e-01,  9.82287251e-01,  9.92114701e-01,
        9.98026728e-01,  1.00000000e+00,  9.98026728e-01,  9.92114701e-01,
        9.82287251e-01,  9.68583161e-01,  9.51056516e-01,  9.29776486e-01,
        9.04827052e-01,  8.76306680e-01,  8.44327926e-01,  8.09016994e-01,
        7.70513243e-01,  7.28968627e-01,  6.84547106e-01,  6.37423990e-01,
        5.87785252e-01,  5.35826795e-01,  4.81753674e-01,  4.25779292e-01,
        3.68124553e-01,  3.09016994e-01,  2.48689887e-01,  1.87381315e-01,
        1.25333234e-01,  6.27905195e-02,  3.67394040e-16, -6.27905195e-02,
       -1.25333234e-01, -1.87381315e-01, -2.48689887e-01, -3.09016994e-01,
       -3.68124553e-01, -4.25779292e-01, -4.81753674e-01, -5.35826795e-01,
       -5.87785252e-01, -6.37423990e-01, -6.84547106e-01, -7.28968627e-01,
       -7.70513243e-01, -8.09016994e-01, -8.44327926e-01, -8.76306680e-01,
       -9.04827052e-01, -9.29776486e-01, -9.51056516e-01, -9.68583161e-01,
       -9.82287251e-01, -9.92114701e-01, -9.98026728e-01, -1.00000000e+00,
       -9.98026728e-01, -9.92114701e-01, -9.82287251e-01, -9.68583161e-01,
       -9.51056516e-01, -9.29776486e-01, -9.04827052e-01, -8.76306680e-01,
       -8.44327926e-01, -8.09016994e-01, -7.70513243e-01, -7.28968627e-01,
       -6.84547106e-01, -6.37423990e-01, -5.87785252e-01, -5.35826795e-01,
       -4.81753674e-01, -4.25779292e-01, -3.68124553e-01, -3.09016994e-01,
       -2.48689887e-01, -1.87381315e-01, -1.25333234e-01, -6.27905195e-02])
In [4]:
s = np.sin(2 * np.pi * t)
s
Out[4]:
array([ 0.00000000e+00,  6.27905195e-02,  1.25333234e-01,  1.87381315e-01,
        2.48689887e-01,  3.09016994e-01,  3.68124553e-01,  4.25779292e-01,
        4.81753674e-01,  5.35826795e-01,  5.87785252e-01,  6.37423990e-01,
        6.84547106e-01,  7.28968627e-01,  7.70513243e-01,  8.09016994e-01,
        8.44327926e-01,  8.76306680e-01,  9.04827052e-01,  9.29776486e-01,
        9.51056516e-01,  9.68583161e-01,  9.82287251e-01,  9.92114701e-01,
        9.98026728e-01,  1.00000000e+00,  9.98026728e-01,  9.92114701e-01,
        9.82287251e-01,  9.68583161e-01,  9.51056516e-01,  9.29776486e-01,
        9.04827052e-01,  8.76306680e-01,  8.44327926e-01,  8.09016994e-01,
        7.70513243e-01,  7.28968627e-01,  6.84547106e-01,  6.37423990e-01,
        5.87785252e-01,  5.35826795e-01,  4.81753674e-01,  4.25779292e-01,
        3.68124553e-01,  3.09016994e-01,  2.48689887e-01,  1.87381315e-01,
        1.25333234e-01,  6.27905195e-02,  1.22464680e-16, -6.27905195e-02,
       -1.25333234e-01, -1.87381315e-01, -2.48689887e-01, -3.09016994e-01,
       -3.68124553e-01, -4.25779292e-01, -4.81753674e-01, -5.35826795e-01,
       -5.87785252e-01, -6.37423990e-01, -6.84547106e-01, -7.28968627e-01,
       -7.70513243e-01, -8.09016994e-01, -8.44327926e-01, -8.76306680e-01,
       -9.04827052e-01, -9.29776486e-01, -9.51056516e-01, -9.68583161e-01,
       -9.82287251e-01, -9.92114701e-01, -9.98026728e-01, -1.00000000e+00,
       -9.98026728e-01, -9.92114701e-01, -9.82287251e-01, -9.68583161e-01,
       -9.51056516e-01, -9.29776486e-01, -9.04827052e-01, -8.76306680e-01,
       -8.44327926e-01, -8.09016994e-01, -7.70513243e-01, -7.28968627e-01,
       -6.84547106e-01, -6.37423990e-01, -5.87785252e-01, -5.35826795e-01,
       -4.81753674e-01, -4.25779292e-01, -3.68124553e-01, -3.09016994e-01,
       -2.48689887e-01, -1.87381315e-01, -1.25333234e-01, -6.27905195e-02,
       -2.44929360e-16,  6.27905195e-02,  1.25333234e-01,  1.87381315e-01,
        2.48689887e-01,  3.09016994e-01,  3.68124553e-01,  4.25779292e-01,
        4.81753674e-01,  5.35826795e-01,  5.87785252e-01,  6.37423990e-01,
        6.84547106e-01,  7.28968627e-01,  7.70513243e-01,  8.09016994e-01,
        8.44327926e-01,  8.76306680e-01,  9.04827052e-01,  9.29776486e-01,
        9.51056516e-01,  9.68583161e-01,  9.82287251e-01,  9.92114701e-01,
        9.98026728e-01,  1.00000000e+00,  9.98026728e-01,  9.92114701e-01,
        9.82287251e-01,  9.68583161e-01,  9.51056516e-01,  9.29776486e-01,
        9.04827052e-01,  8.76306680e-01,  8.44327926e-01,  8.09016994e-01,
        7.70513243e-01,  7.28968627e-01,  6.84547106e-01,  6.37423990e-01,
        5.87785252e-01,  5.35826795e-01,  4.81753674e-01,  4.25779292e-01,
        3.68124553e-01,  3.09016994e-01,  2.48689887e-01,  1.87381315e-01,
        1.25333234e-01,  6.27905195e-02,  3.67394040e-16, -6.27905195e-02,
       -1.25333234e-01, -1.87381315e-01, -2.48689887e-01, -3.09016994e-01,
       -3.68124553e-01, -4.25779292e-01, -4.81753674e-01, -5.35826795e-01,
       -5.87785252e-01, -6.37423990e-01, -6.84547106e-01, -7.28968627e-01,
       -7.70513243e-01, -8.09016994e-01, -8.44327926e-01, -8.76306680e-01,
       -9.04827052e-01, -9.29776486e-01, -9.51056516e-01, -9.68583161e-01,
       -9.82287251e-01, -9.92114701e-01, -9.98026728e-01, -1.00000000e+00,
       -9.98026728e-01, -9.92114701e-01, -9.82287251e-01, -9.68583161e-01,
       -9.51056516e-01, -9.29776486e-01, -9.04827052e-01, -8.76306680e-01,
       -8.44327926e-01, -8.09016994e-01, -7.70513243e-01, -7.28968627e-01,
       -6.84547106e-01, -6.37423990e-01, -5.87785252e-01, -5.35826795e-01,
       -4.81753674e-01, -4.25779292e-01, -3.68124553e-01, -3.09016994e-01,
       -2.48689887e-01, -1.87381315e-01, -1.25333234e-01, -6.27905195e-02])
In [5]:
list(range(0,10,2))
Out[5]:
[0, 2, 4, 6, 8]
In [6]:
plt.plot(t, s)
Out[6]:
[<matplotlib.lines.Line2D at 0x234b887eb70>]
In [7]:
fig, ax = plt.subplots()
ax.plot(t, s)

ax.set(xlabel='time (s)', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()

#fig.savefig("test.png")
#plt.show()
In [8]:
main_output_folder_path = r"E:\openknowledgeshare.blogspot.com\Python\Outputs"
In [9]:
import os
image_file_path = os.path.join(main_output_folder_path,'Simple_Plot.png')
In [10]:
fig.savefig(image_file_path)

Line Plot

In [11]:
a = [1,2,3,4,5]
In [12]:
b = [2,5,8,20,10]
In [14]:
plt.plot(a,b)
plt.grid()

Scatter Plot

In [15]:
a = [1,2,3,4,5]
b = [2,5,8,20,10]
In [16]:
plt.scatter(a,b)
Out[16]:
<matplotlib.collections.PathCollection at 0x234b8b8e320>

Multi Line Plot

In [19]:
a = [1,2,3,4,5]
b = [2,5,8,20,10]
In [20]:
c = [10,20,30,40,50]
In [22]:
plt.plot(a,b,label='line1')
plt.plot(a,c,label='line2')
Out[22]:
[<matplotlib.lines.Line2D at 0x234b8d6e438>]
In [31]:
plt.plot(a,b,label='line1')
plt.plot(a,c,label='line2')
plt.legend(loc = 'best')
Out[31]:
<matplotlib.legend.Legend at 0x234b931f518>

Subplots

In [32]:
a = [1,2,3,4,5]
b = [2,5,8,20,10]
c = [10,20,30,40,50]
In [38]:
fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
In [44]:
axs[0].plot(a,b,label='Line1')
fig.add_axes(axs[0])
Out[44]:
<matplotlib.axes._subplots.AxesSubplot at 0x234ba4d16a0>
In [45]:
axs[1].plot(a,c,label='Line2')
fig.add_axes(axs[1])
Out[45]:
<matplotlib.axes._subplots.AxesSubplot at 0x234ba516978>
In [ ]:
fig.colorbar(line, ax=axs[0])
In [46]:
plt.legend()
fig.show()
No handles with labels found to put in legend.
In [56]:
import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(10, 10))
ax[0][0].plot(a, b)  # The method ax is now one array and is referred by indexes
ax[0][0].set_title('Title')
ax[1][0].plot(a, c)
ax[1][0].set_title('Title')
ax[0][1].scatter(a, b)  # The method ax is now one array and is referred by indexes
ax[0][1].set_title('Title')
ax[1][1].scatter(a, c)
ax[1][2].set_title('Title')

#plt.tight_layout()  # It will separate the graphs to avoid overlays
plt.show()
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-56-9e66a2d7c75c> in <module>
      9 ax[0][1].set_title('Title')
     10 ax[1][1].scatter(a, c)
---> 11 ax[1][2].set_title('Title')
     12 
     13 #plt.tight_layout()  # It will separate the graphs to avoid overlays

IndexError: index 2 is out of bounds for axis 0 with size 2

Histogram

In [59]:
a = np.arange(0,100,1)
b = np.random.choice(a,1000)
In [64]:
plt.hist(b,bins=[10,20,50,70,100])
Out[64]:
(array([ 99., 305., 206., 300.]),
 array([ 10,  20,  50,  70, 100]),
 <a list of 4 Patch objects>)
In [65]:
plt.hist(b,bins=20)
Out[65]:
(array([40., 50., 47., 52., 59., 61., 42., 42., 59., 42., 65., 52., 40.,
        49., 53., 54., 49., 40., 49., 55.]),
 array([ 0.  ,  4.95,  9.9 , 14.85, 19.8 , 24.75, 29.7 , 34.65, 39.6 ,
        44.55, 49.5 , 54.45, 59.4 , 64.35, 69.3 , 74.25, 79.2 , 84.15,
        89.1 , 94.05, 99.  ]),
 <a list of 20 Patch objects>)

HeatMap

In [66]:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

# Load the example flights dataset and convert to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")

# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, ax=ax)
Out[66]:
<matplotlib.axes._subplots.AxesSubplot at 0x234bc609668>
In [71]:
import seaborn as sns; sns.set(style="ticks", color_codes=True)
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="day", row="smoker")
g = g.map(plt.hist, "total_bill")
In [70]:
tips['day'].unique()
Out[70]:
[Sun, Sat, Thur, Fri]
Categories (4, object): [Sun, Sat, Thur, Fri]
In [ ]:
 

Comments

Popular posts from this blog

How to run Jupyter Notebooks in Cloud

GUI Programming using Tkinter Python

How to download , install and configure Anaconda - Python