Mastering Matplotlib: A Step-by-Step Tutorial for Beginners
Data Visualization
Data visualization is about viewing or visualizing data in the form of graphical plots, charts, figures, and animations.
Data Visualization Libraries in Python?
Altair - Declarative statistical visualization library for Python.
Bokeh - Interactive Web Plotting for Python.
bqplot - Interactive Plotting Library for the Jupyter Notebook.
Cartopy - A cartographic Python library with matplotlib support.
Dash - Built on top of Flask, React, and Plotly aimed at analytical web applications.
diagrams - Diagram as Code.
Matplotlib - A Python 2D plotting library.
plotnine - A grammar of graphics for Python based on ggplot2.
Pygal - A Python SVG Charts Creator.
PyGraphviz - Python interface to Graphviz
PyQtGraph - Interactive and real-time 2D/3D/Image plotting and science/engineering widgets.
Seaborn - Statistical data visualization using Matplotlib.
VisPy - High-performance scientific visualization based on OpenGL.
What is Matplotlib?
Matplotlib is a plotting library for the Python programming language and its numerical mathematics extension NumPy. It provides an object-oriented API for embedding plots into applications using general-purpose GUI toolkits like Tkinter, wxPython, Qt, or GTK+.
Organized in hierarchy
top-level matplotlib.pyplot module is present
pyplot is used for a few activities such as figure creation,
Through the created figure, one or more axes/subplot objects are created
Axes objects can further be used for doing many plotting actions.
#install matplotlib
!pip install matplotlib
Requirement already satisfied: matplotlib in c:\users\mritu\anaconda3\lib\site-packages (3.8.0)
Requirement already satisfied: contourpy>=1.0.1 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (1.0.5)
Requirement already satisfied: cycler>=0.10 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (4.25.0)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (1.4.4)
Requirement already satisfied: numpy<2,>=1.21 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (1.24.3)
Requirement already satisfied: packaging>=20.0 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (23.0)
Requirement already satisfied: pillow>=6.2.0 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (9.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (3.0.9)
Requirement already satisfied: python-dateutil>=2.7 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (2.8.2)
Requirement already satisfied: six>=1.5 in c:\users\mritu\anaconda3\lib\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
#import library
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
#get matplotlib version
matplotlib.__version__
>>> '3.8.0'
#upgrade matplotlib
!pip install --upgrade matplotlib
Requirement already satisfied: matplotlib in c:\users\mritu\anaconda3\lib\site-packages (3.8.0)
Requirement already satisfied: contourpy>=1.0.1 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (1.0.5)
Requirement already satisfied: cycler>=0.10 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (4.25.0)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (1.4.4)
Requirement already satisfied: numpy<2,>=1.21 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (1.24.3)
Requirement already satisfied: packaging>=20.0 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (23.0)
Requirement already satisfied: pillow>=6.2.0 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (9.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (3.0.9)
Requirement already satisfied: python-dateutil>=2.7 in c:\users\mritu\anaconda3\lib\site-packages (from matplotlib) (2.8.2)
Requirement already satisfied: six>=1.5 in c:\users\mritu\anaconda3\lib\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
#get matplotlib version after upgrade
matplotlib.__version__
>>> '3.8.0'
Parts of Matplotlib
- Figure: Whole area chosen for plotting
- Axes: Area where data is plotted
- Axis: Number-line link objects, which define graph limits (x-axis, y-axis)
- Artist: Every element on the figure is an artist (Major and Minor tick table)
Figure
It refers to the whole area or page on which everything is drawn.
It includes Axes, Axis and other Artist element
The figure is created using the figure function of the pyplot module
#create figure using plt.figure() return figure object
fig = plt.figure()
# Viewing figure to display figure needs to tell explicitly pyplot to display it
# The below command will return the object to display the figure it requires at least one axe.
plt.show()
>>> <Figure size 640x480 with 0 Axes>
Axes
Axes are the region of the figure, available for plotting data
Axes object is associated with only one Figure
A figure can contain one or more number of Axes element
Axes contain two Axis objects in case of 2D plots and three objects in case of 3D plots
#Axes can be added by using methods add_subplot(nrows, ncols, index) return axes object
fig = plt.figure()
ax = fig.add_subplot()
plt.show()
#Adjusting Figure Size => plt.figure(figsize=(x, y))
fig = plt.figure(figsize=(3, 3))
ax = fig.add_subplot(1, 1, 1)
plt.show()
#setting title and axis label as a parameter
fig = plt.figure(figsize=(10,3))
ax = fig.add_subplot(1,1,1)
ax.set(title="Figure"
, xlabel='x-axis'
, ylabel='y-axis'
, xlim=(0,5)
, ylim=(0,10)
, xticks=[0.1, 0.9, 2, 3, 4, 5]
, xticklabels=['pointone, 'pointnine', 'two', 'three', 'four', 'five'])
plt.show()
#setting title and axis label as a method
fig = plt.figure(figsize=(3,3))
ax = fig.add_subplot(111)
ax.set_title("Figure")
ax.set_xlabel("X-Axis")
ax.set_ylabel('Y-Axis')
ax.set_xlim([0,5])
ax.set_ylim([0,10])
plt.show()
#setting title and axis label explicitly
fig = plt.figure(figsize=(3,3))
ax = fig.add_subplot(1,1,1)
plt.title('Figure')
plt.xlabel('X-Axis')
plt.ylabel('Y-Axis')
plt.xlim(0,5)
plt.ylim(0,10)
plt.show()
#plot data points in graph => plt.plot(x, y) will use
x = list(range(0,5))
y = list(range(0,10, 2))
fig = plt.figure(figsize=(3,3))
ax = fig.add_subplot(1,1,1)
ax.set(title="Figure"
, xlabel='x-asix'
, ylabel='y-axis'
, xlim=(0,5)
, ylim=(0,10))
plt.plot(x,y)
plt.show()
#adding legend in graph => plt.legend(x, y, label='legend'); plt.legend() will use
x = list(range(0,5))
y = list(range(0,10, 2))
fig = plt.figure(figsize=(3,3))
ax = fig.add_subplot(1,1,1)
ax.set(title="Figure"
, xlabel='x-asix'
, ylabel='y-axis'
, xlim=(0,5)
, ylim=(0,10))
plt.plot(x,y, label='legend')
plt.legend()
plt.show()
Types Of Plot
Line Plot
Line Plot is used to visualize a trend in data.
A Line Plot is also used to compare two variables.
Line Plots are simple and effective in communicating.
plot function is used for drawing Line plots.
Syntax: plt.plot(x,y)
x = [1, 5, 8, 12, 15, 19, 22, 26, 29]
y = [29.3, 30.1, 30.4, 31.5, 32.3, 32.6, 31.8, 32.4, 32.7]
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(1,1,1)
ax.set(title='Line Plot Graph'
, xlabel='X-Axis'
, ylabel='Y-Axis'
, xlim=(0, 30)
, ylim=(25, 35))
ax.plot(x, y)
plt.show()
Parameter for Plot
color - Sets the color of the line.
linestyle - Sets the line style, e.g., solid, dashed, etc.
linewidth - Sets the thickness of a line.
marker - Chooses a marker for data points, e.g., circle, triangle, etc.
markersize - Sets the size of the chosen marker.
label - Names the line, which will come in legend.
fig = plt.figure(figsize=(6,3))
ax = fig.add_subplot(1,1,1)
ax.set(title='Line Plot Graph'
, xlabel='X-Axis'
, ylabel='Y-Axis'
, xlim=(0, 30)
, ylim=(25, 35))
ax.plot(x
, y
, color='blue'
, linestyle='dotted'
, linewidth=1
, marker='*'
, markersize=10
, label='label')
plt.legend()
plt.show()
Multiple lines with a single plot function
x=[1,4,6,8,2]
y=[10,10,1,5,0]
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot()
ax.plot(x, y, 'g<', x,y, 'r--')
<matplotlib.lines.Line2D at 0x24718806550>]
Scatter Graph
It similar to a line graph
Used to show how one variable is related to another
It consists of data points, if it is linear then it is highly correlated
It only marks the data point.
Syntax: plt.scatter(x,y)
Parameter of Scatter Graph
c: Sets color of markers.
s: Sets the size of markers.
marker: Select a marker. e.g.: circle, triangle, etc
edgecolor: Sets the color of lines on the edges of markers.
x=[1,4,6,8,2]
y=[10,10,1,5,0]
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot()
ax.scatter(x
, y
, c='red'
, s=500
, marker='*'
, edgecolor='blue'
, label='scatter')
ax.set_title('Scatter')
ax.set_xlabel('X-Axis')
ax.set_ylabel('Y-Axis')
plt.legend()
<matplotlib.legend.Legend at 0x24718801890>
Bar Chart
It is mostly used to compare categories
bar is used for vertical bar plots
barh is used for horizontal bar plots
Syntax: bar(x, height) or bar(y,width)
Parameter of Bar Graph
Color: Sets the color of bars.
edgecolor: Sets the color of the borderline of bars.
label: Sets label to a bar, appearing in legend.
color: the color of the bar
align: Aligns the bars w.r.t x-coordinates
# width: Sets the width of bars
bar(x,width)
# height: Sets the height of bars
barh(y,height)
#vertical bar graph
x = [1, 2, 3]
y = [10,20,30]
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot()
ax.set(title='Bar Graph'
, xlabel='X-Axis'
, ylabel='Y-Axis'
, xticks=x
, label='label'
, xticklabels=['first', 'second', 'third'])
ax.bar(x
, y
, color='green'
, edgecolor='red'
, width=0.5
, align='edge'
, label='label'
, linewidth=5)
plt.legend()
plt.show()
#horizontal bar graph
x = [1, 2, 3]
y = [10,20,30]
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot()
ax.set(title='Bar Graph'
, xlabel='X-Axis'
, ylabel='Y-Axis'
, xticks=x
, label='label'
, xticklabels=['first', 'second', 'third'])
plt.barh(x
, y
, color='green'
, edgecolor='red'
, height=0.5
, align='edge'
, label='label')
plt.legend()
plt.show()
Error Bar
It plots y versus x as lines and markers with attached error bars.
Parameter of Error Bar
ecolor: it is the color of the error bar lines.
elinewidth: it is the linewidth of the errorbar lines.
capsize: it is the length of the error bar caps in points.
barsabove: It contains a boolean value True for plotting error bars above the plot symbols. Its default value is False.
Syntax: errorbar()
a = [1, 3, 5, 7]
b = [11, 2, 4, 19]
c = [1, 1, 1, 1]
d = [4, 3, 2, 1]
fig=plt.figure(figsize=(4,4))
ax=fig.add_subplot()
plt.bar(a, b)
plt.errorbar(a, b, xerr=c, yerr=d, fmt="^", color="r")
<ErrorbarContainer object of 3 artists>
Pie Plot
It is effective in showing the proportion of categories.
It is best suited for comparing fewer categories.
It is used to highlight the proportion of one or a group of categories.
Syntax: pie(x), x: size of portions, passed as fraction or number
Parameter of Pie
colors: Sets the colors of portions.
labels: Sets the labels of portions.
startangle: Sets the start angle at which the portion drawing starts.
autopct: Sets the percentage display format of an area, covering portions.
x=[1,2,3,4,5]
fig=plt.figure(figsize=(4,4))
ax=fig.add_subplot()
ax.set(title='Pie')
plt.pie(x
, colors=['brown', 'red', 'green', 'yellow', 'blue']
, labels=['first', 'second', 'third', 'fourth', 'fifth']
, startangle=0
, autopct='%1.1f%%')
([<matplotlib.patches.Wedge at 0x2471900da10>,
<matplotlib.patches.Wedge at 0x247189a1f10>,
<matplotlib.patches.Wedge at 0x247189a26d0>,
<matplotlib.patches.Wedge at 0x247189a2c10>,
<matplotlib.patches.Wedge at 0x247189670d0>],
[Text(1.075962358309037, 0.22870287165240302, 'first'),
Text(0.7360436312779136, 0.817459340184711, 'second'),
Text(-0.33991877217145816, 1.046162142464278, 'third'),
Text(-1.0759623315431446, -0.2287029975759841, 'fourth'),
Text(0.5500001932481627, -0.9526278325909777, 'fifth')],
[Text(0.5868885590776565, 0.12474702090131072, '6.7%'),
Text(0.4014783443334074, 0.4458869128280241, '13.3%'),
Text(-0.18541023936624987, 0.5706338958896061, '20.0%'),
Text(-0.5868885444780788, -0.12474708958690041, '26.7%'),
Text(0.3000001054080887, -0.5196151814132605, '33.3%')])
Histogram Chart
It is used to visualize the spread of data in a distribution.
Syntax: hist(x), x is the data values
Parameter of Histogram
Color: Sets the color of bars.
bins: Sets the number of bins to be used.
density: Sets to True where bins display fraction and not the count.
x=[1,2,3,4,5]
fig=plt.figure(figsize=(20,4))
ax=fig.add_subplot()
ax.set(title='Histogram'
, xlabel='X-Axis'
, ylabel='Y-Axis')
ax.hist(x
, color='red'
, bins=10
, density=True
, orientation='vertical')
(array([0.5, 0. , 0.5, 0. , 0. , 0.5, 0. , 0.5, 0. , 0.5]),
array([1. , 1.4, 1.8, 2.2, 2.6, 3. , 3.4, 3.8, 4.2, 4.6, 5. ]),
<BarContainer object of 10 artists>)
Box Plot
It is a type of chart that depicts a group of numerical data through their quartiles. It is a simple way to visualize the shape of our data. It makes comparing characteristics of data between categories very easy.
Box plots are also used to visualize the spread of data.
Box plots are used to compare distributions.
Box plots can also be used to detect outliers.
Syntax: boxplot(x)
Parameter of Box Plot
labels: Sets the labels for box plots.
notch: Sets to True if notches need to be created around the median.
bootstrap: Number set to indicate that notches around the median are bootstrapped.
vert: Sets to False for plotting Box plots horizontally.
x=[1,2,3,4,5]
fig=plt.figure(figsize=(20,10))
ax=fig.add_subplot()
ax.set(title='Histogram'
, xlabel='X-Axis'
, ylabel='Y-Axis')
ax.boxplot(x
, labels=['start']
, notch=False
, bootstrap=10000
, vert=True)
{'whiskers': [<matplotlib.lines.Line2D at 0x24716eae810>,
<matplotlib.lines.Line2D at 0x24716eadd10>],
'caps': [<matplotlib.lines.Line2D at 0x24716eadd50>,
<matplotlib.lines.Line2D at 0x24716ed9790>],
'boxes': [<matplotlib.lines.Line2D at 0x24716eacb50>],
'medians': [<matplotlib.lines.Line2D at 0x24716edb390>],
'fliers': [<matplotlib.lines.Line2D at 0x247187d9d10>],
'means': []}
np.random.seed(100)
x = 50 + 10*np.random.randn(1000)
y = 70 + 25*np.random.randn(1000)
z = 30 + 5*np.random.randn(1000)
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
ax.set(title="Box plot with outlier",
xlabel='x-Axis', ylabel='Y-Axis')
ax.boxplot([x, y, z]
, labels=['A', 'B', 'C']
, notch=True
, bootstrap=10000)
plt.show()
Matplotlib Styles
plt.style.available
'_classic_test_patch',
'_mpl-gallery',
'_mpl-gallery-nogrid',
'bmh',
'classic',
'dark_background',
'fast',
'fivethirtyeight',
'ggplot',
'grayscale',
'seaborn-v0_8',
'seaborn-v0_8-bright',
'seaborn-v0_8-colorblind',
'seaborn-v0_8-dark',
'seaborn-v0_8-dark-palette',
'seaborn-v0_8-darkgrid',
'seaborn-v0_8-deep',
'seaborn-v0_8-muted',
'seaborn-v0_8-notebook',
'seaborn-v0_8-paper',
'seaborn-v0_8-pastel',
'seaborn-v0_8-poster',
'seaborn-v0_8-talk',
'seaborn-v0_8-ticks',
'seaborn-v0_8-white',
'seaborn-v0_8-whitegrid',
'tableau-colorblind10']
plt.style.use('ggplot')
plt.style.context('ggplot')
>>> <contextlib._GeneratorContextManager at 0x24718952750>
x = [1, 5, 8, 12, 15, 19, 22, 26, 29]
y = [29.3, 30.1, 30.4, 31.5, 32.3, 32.6, 31.8, 32.4, 32.7]
with plt.style.context(['dark_background', 'ggplot']):
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
ax.set(title='ggplot'
, xlabel='X-Axis'
, ylabel='Y-Axis'
, xlim=(0, 30)
, ylim=(25, 35))
ax.plot(x, y, color='green', linestyle='--', linewidth=3)
plt.show()
sepal_len=[6.01,6.94,7.59]
sepal_wd=[4.42,3.77,3.97]
petal_len=[2.46,5.26,6.55]
petal_wd=[1.24,2.33,3.03]
species=['setosa','versicolor','virginica']
species_index1=[0.8,1.8,2.8]
species_index2=[1.0,2.0,3.0]
species_index3=[1.2,2.2,3.2]
species_index4=[1.4,2.4,3.4]
with plt.style.context('ggplot'):
fig = plt.figure(figsize=(9,7))
ax = fig.add_subplot()
ax.bar(species_index1
, sepal_len
, width=0.2
, label='Sepal Width'
)
ax.bar(species_index2
, sepal_wd
, width=0.2
, label='Sepal Width'
)
ax.bar(species_index3
, petal_len
, width=0.2
, label='Petal Length'
)
ax.bar(species_index4
, petal_wd
, width=0.2
, label='Petal Width'
)
ax.set(xlabel='Species'
, ylabel='Iris Measurements (cm)'
, title='Mean Measurements of Iris Species'
, xlim=(0.5,3.7)
, ylim=(0,10)
, xticks=species_index2
, xticklabels=species
)
Custom Style
A style sheet is a text file having the extension .mplstyle.
All custom style sheets are placed in a folder, stylelib, present in the config directory of matplotlib.
Create a file mystyle.mplstyle with the below-shown contents and save it in the folder <matplotlib_configdir/stylelib/.
Reload the matplotlib library with the subsequent expression.
Use the below expression for knowing the Config folder.
#Reload the matplotlib library with the subsequent expression.
print(matplotlib.get_configdir())
>>> C:\Users\mritu\.matplotlib
Create a file mystyle.mplstyle with the below-shown contents and save it in the folder <matplotlib_configdir/stylelib/.
axes.titlesize : 24
axes.labelsize : 20
lines.linewidth : 8
lines.markersize : 10
xtick.labelsize : 16
ytick.labelsize : 16
Reload the matplotlib library with the subsequent expression.
matplotlib.style.reload_library()
print(plt.style.available)
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-v0_8', 'seaborn-v0_8-bright', 'seaborn-v0_8-colorblind', 'seaborn-v0_8-dark', 'seaborn-v0_8-dark-palette', 'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep', 'seaborn-v0_8-muted', 'seaborn-v0_8-notebook', 'seaborn-v0_8-paper', 'seaborn-v0_8-pastel', 'seaborn-v0_8-poster', 'seaborn-v0_8-talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white', 'seaborn-v0_8-whitegrid', 'tableau-colorblind10']
matplotlibrc file
matplotlib uses all the settings specified in matplotlibrc file.
These settings are known as rc settings or rc parameters.
For customization, rc settings can be altered in the file or interactively.
The location of the active matplotlibrc file used by matplotlib can be found below.
import matplotlib
matplotlib.matplotlib_fname()
>>> C:\\Users\\mritu\\anaconda3\\Lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'
Matplotlib rcParams
All rc settings, present in matplotlibrc file are stored in a dictionary named matplotlib.rcParams.
Any settings can be changed by editing the values of this dictionary.
import matplotlib as mpl
mpl.rcParams['lines.linewidth'] = 2
mpl.rcParams['lines.color'] = 'r'
plt.style.available
['Solarize_Light2',
'_classic_test_patch',
'_mpl-gallery',
'_mpl-gallery-nogrid',
'bmh',
'classic',
'dark_background',
'fast',
'fivethirtyeight',
'ggplot',
'grayscale',
'seaborn-v0_8',
'seaborn-v0_8-bright',
'seaborn-v0_8-colorblind',
'seaborn-v0_8-dark',
'seaborn-v0_8-dark-palette',
'seaborn-v0_8-darkgrid',
'seaborn-v0_8-deep',
'seaborn-v0_8-muted',
'seaborn-v0_8-notebook',
'seaborn-v0_8-paper',
'seaborn-v0_8-pastel',
'seaborn-v0_8-poster',
'seaborn-v0_8-talk',
'seaborn-v0_8-ticks',
'seaborn-v0_8-white',
'seaborn-v0_8-whitegrid',
'tableau-colorblind10']
Subplots
It provides a way to plot multiple plots on a single figure. Given the number of rows and columns, it returns a tuple (fig, ax), giving a single figure fig with an array of axes ax. Subplot creates the Axes object at index position and returns it.
# 'index' is the position in a virtual grid with 'nrows' and 'ncols'
# 'index' number varies from 1 to `nrows*ncols`.
subplot(nrows, ncols, index)
fig = plt.figure(figsize=(10,8))
ax1 = plt.subplot(2, 2, 1, title='Plot1')
ax2 = plt.subplot(2, 2, 2, title='Plot2')
ax3 = plt.subplot(2, 2, 3, title='Plot3')
ax4 = plt.subplot(2, 2, 4, title='Plot4')
plt.show()
fig = plt.figure(figsize=(10,8))
ax1 = plt.subplot(2, 2, (1,2), title='Plot1')
ax1.set_xticks([])
ax1.set_yticks([])
ax2 = plt.subplot(2, 2, 3, title='Plot2')
ax2.set_xticks([])
ax2.set_yticks([])
ax3 = plt.subplot(2, 2, 4, title='Plot3')
ax3.set_xticks([])
ax3.set_yticks([])
plt.show()
Subplots Using 'GridSpec'
GridSpec class of matplotlib.gridspec can also be used to create Subplots.
Initially, a grid with a given number of rows and columns is set up.
Later while creating a subplot, the number of rows and columns of the grid, spanned by the subplot are provided as inputs to the subplot function.
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(10,8))
gd = gridspec.GridSpec(2,2)
ax1 = plt.subplot(gd[0,:],title='Plot1')
ax2 = plt.subplot(gd[1,0])
ax3 = plt.subplot(gd[1,-1])
plt.show()
fig = plt.figure(figsize=(10,8))
gd = gridspec.GridSpec(3,2)
ax1 = plt.subplot(gd[0,:],title='Plot1')
ax1.set_xticks([])
ax1.set_yticks([])
ax2 = plt.subplot(gd[1,0],title='Plot1')
ax2.set_xticks([])
ax2.set_yticks([])
ax3 = plt.subplot(gd[2,0],title='Plot1')
ax3.set_xticks([])
ax3.set_yticks([])
ax4 = plt.subplot(gd[1:,1],title='Plot1')
ax4.set_xticks([])
ax4.set_yticks([])
plt.show()
np.random.seed(1500)
x=np.random.rand(10)
y=np.random.rand(10)
z=np.sqrt(x**2+y**2)
fig=plt.figure(figsize=(9,7))
fig.suptitle('Main title for all subplot')
axes1=plt.subplot(2,2,1,title='Scatter plot with Diamond Markers')
axes1.scatter(x, y, s=80, c=z, marker='d')
axes1.set(xticks=(0.0,0.5,1.0,1.5), yticks=(-0.2,0.2,0.6,1.0))
axes2=plt.subplot(2,2,2,title='Scatter plot with Circle Markers')
axes2.scatter(x, y, s=80, c=z, marker='o')
axes2.set(xticks=(0.0,0.5,1.0,1.5), yticks=(-0.2,0.2,0.6,1.0))
axes3=plt.subplot(2,2,3,title='Scatter plot with Plus Markers')
axes3.scatter(x, y, s=80, c=z, marker='*')
axes3.set(xticks=(0.0,0.5,1.0,1.5), yticks=(-0.2,0.2,0.6,1.0))
axes4=plt.subplot(2,2,4,title='Scatter plot with Upper Triangle')
axes4.scatter(x, y, s=80, c=z, marker='^')
axes4.set(xticks=(0.0,0.5,1.0,1.5), yticks=(-0.2,0.2,0.6,1.0))
plt.tight_layout()
fig = plt.figure()
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[:2, :2])
ax2 = plt.subplot(gs[0, 2])
ax3 = plt.subplot(gs[1, 2])
ax4 = plt.subplot(gs[-1, 0])
ax5 = plt.subplot(gs[-1, 1:])
plt.show()
import matplotlib.gridspec as gridspec
fig = plt.figure()
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[-1, 0])
ax5 = plt.subplot(gs[-1, -2])
plt.show()
Common Pitfalls in Data Visualization
Common pitfalls to be avoided for better Data Visualization are:
Creating unlabelled plots.
Using 3-dimensional charts. Don't prefer 3-D plots, unless they add any value over 2-D charts.
Portions of a pie plot do not sum up to a meaningful number.
Showing too many portions in a single pie chart.
Bar charts not starting at zero.
Failing to normalize the data.
Adding extra labels and fancy images.
Best Practices of Data Visualization
A few of the best practices of Data Visualization are:
Display the data points on the plot, whenever required.
Whenever correlation is plotted, clarify that you have not established any cause of the link between the variables.
Prefer labeling data objects directly inside the plot, rather than using legends.
Create a visualization, which stands by itself. Avoid adding extra text to tell more about visualization.
fig=plt.figure()
a=fig.add_subplot()
a.plot(x, y, 'g^')
[<matplotlib.lines.Line2D at 0x24719563990>]