Python

 

 

 

 

Matplotlib - 2D Graph

 

 

Matplotlib 2D Graph is pretty similar to Matlab 2D Plot in terms of syntax and functionality. If you are familiar with Matlab 2D plot, it would be easier to learn Matplotlib plot. But I noticed Matplotlib has many more functionalities that are not supported by Matlab.

 

 

NOTE : To use matplotlib you need to install matplotlib package first. For the package installation, refer to here.

 

 

 

plot

 

There are two ways of plotting, one with default pyplot object and the other one with axes object. If you are familiar with matlab plot functions, you may not need to learn anything new for the default pyplot object. Plotting with axes object would require a little bit more extra steps but it would be more flexible in terms of defining the plotting area in the figure window etc. When I first started using matplotlib, I mostly used the default pyplot object since the syntax and concept is almost same as Matlab that I am already used to but I get to turn more to axes object due to the extra flexibility.

 

 

plot with default pyplot

 

import matplotlib.pyplot as plt

import numpy as np

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.plot(t,np.sin(t),'r-')

plt.xlabel('t')

plt.ylabel('sin(t)')

plt.show();

 

 

plot with axes

 

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

 

rect1 = [0.1, 0.1, 0.8, 0.8];

ax1 = fig.add_axes(rect1);

 

t = np.linspace(0, 10, 40)

ax1.plot(t,np.sin(t))

 

fig.show()

 

 

 

 

multiple graphs in single plot

 

 

import matplotlib.pyplot as plt

import numpy as np

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.plot(t,np.sin(t),'r-',t,np.sin(2*t),'b--')

plt.xlabel('t')

plt.ylabel('sin(t)')

plt.show();

 

 

subplot

 

 

subplot with same size

 

import matplotlib.pyplot as plt

import numpy as np

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.subplot(2,2,1);

plt.plot(t,np.sin(t));

 

plt.subplot(2,2,2);

plt.plot(t,np.sin(2*t));

 

plt.subplot(2,2,3);

plt.plot(t,np.sin(3*t));

 

plt.subplot(2,2,4);

plt.plot(t,np.sin(4*t));

 

plt.show();

 

 

 

subplot with different size

 

import matplotlib.pyplot as plt

import numpy as np

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.subplot(2,1,1);

plt.plot(t,np.sin(t));

 

plt.subplot(2,2,3);

plt.plot(t,np.sin(3*t));

 

plt.subplot(2,2,4);

plt.plot(t,np.sin(4*t));

 

plt.show();

 

 

 

 

import matplotlib.pyplot as plt

import numpy as np

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

 

plt.subplot(2,2,1);

plt.plot(t,np.sin(t));

 

plt.subplot(2,2,2);

plt.plot(t,np.sin(2*t));

 

plt.subplot(2,1,2);

plt.plot(t,np.sin(3*t));

 

plt.show();

 

 

 

spacing between subplots

 

import matplotlib.pyplot as plt

import numpy as np

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.subplot(2,2,1);

plt.plot(t,np.sin(t));

 

plt.subplot(2,2,2);

plt.plot(t,np.sin(2*t));

 

plt.subplot(2,2,3);

plt.plot(t,np.sin(3*t));

 

plt.subplot(2,2,4);

plt.plot(t,np.sin(4*t));

 

plt.tight_layout(pad=4.0)

 

plt.show();

 

 

 

 

import matplotlib.pyplot as plt

import numpy as np

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.subplot(2,2,1);

plt.plot(t,np.sin(t));

 

plt.subplot(2,2,2);

plt.plot(t,np.sin(2*t));

 

plt.subplot(2,2,3);

plt.plot(t,np.sin(3*t));

 

plt.subplot(2,2,4);

plt.plot(t,np.sin(4*t));

 

plt.tight_layout(w_pad=4.0, h_pad = 2)

 

plt.show();

 

 

 

 

Multiplot with multiple axis

 

 

multiplot with same size

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

rect1 = [0.1, 0.5, 0.8, 0.4];

rect2 = [0.1, 0.1, 0.8, 0.4];

ax1 = fig.add_axes(rect1,

                   xticklabels=[], ylim=(-1.2, 1.2))

ax2 = fig.add_axes(rect2,

                   ylim=(-1.2, 1.2))

 

t = np.linspace(0, 10, 40)

ax1.plot(t,np.sin(t))

ax2.plot(t,np.cos(t));

 

fig.show()

 

 

 

Multiplot with difference size

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

rect1 = [0.1, 0.4, 0.8, 0.5];

rect2 = [0.1, 0.1, 0.8, 0.3];

ax1 = fig.add_axes(rect1,

                   xticklabels=[], ylim=(-1.2, 1.2))

ax2 = fig.add_axes(rect2,

                   ylim=(-1.2, 1.2))

 

t = np.linspace(0, 10, 40)

ax1.plot(t,np.sin(t))

ax2.plot(t,np.cos(t));

 

fig.show()

 

 

 

Multiplot with Arbitrary Size

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

rect1 = [0.1, 0.5, 0.8, 0.4];

rect2 = [0.1, 0.1, 0.8, 0.3];

ax1 = fig.add_axes(rect1,

                   xticklabels=[], ylim=(-1.2, 1.2))

ax2 = fig.add_axes(rect2,

                   ylim=(-1.2, 1.2))

 

t = np.linspace(0, 10, 40)

ax1.plot(t,np.sin(t))

ax2.plot(t,np.cos(t));

 

fig.show()

 

 

 

 

fig = plt.figure()

rect1 = [0.1, 0.5, 0.3, 0.4];

rect2 = [0.5, 0.5, 0.4, 0.3];

rect3 = [0.1, 0.1, 0.8, 0.3];

 

ax1 = fig.add_axes(rect1,

                   xticklabels=[], ylim=(-1.2, 1.2))

ax2 = fig.add_axes(rect2,

                   ylim=(-1.2, 1.2))

ax3 = fig.add_axes(rect3,

                   ylim=(-1.2, 1.2))

 

t = np.linspace(0, 10, 80)

 

 

 

 

Setting the size of a figure window

 

 

Setting the size with figure( )

 

You can set the size of the figure when you creates a figure.

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure(figsize=[8,4])  # the size is configured in inches

rect1 = [0.1, 0.4, 0.8, 0.5];

rect2 = [0.1, 0.1, 0.8, 0.3];

ax1 = fig.add_axes(rect1,

                   xticklabels=[], ylim=(-1.2, 1.2))

ax2 = fig.add_axes(rect2,

                   ylim=(-1.2, 1.2))

 

t = np.linspace(0, 10, 40)

ax1.plot(t,np.sin(t))

ax2.plot(t,np.cos(t));

 

fig.show()

 

 

Setting the size with gcf()

 

or you can change the size of the figure after a figure is created.

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

rect1 = [0.1, 0.4, 0.8, 0.5];

rect2 = [0.1, 0.1, 0.8, 0.3];

ax1 = fig.add_axes(rect1,

                   xticklabels=[], ylim=(-1.2, 1.2))

ax2 = fig.add_axes(rect2,

                   ylim=(-1.2, 1.2))

 

t = np.linspace(0, 10, 40)

ax1.plot(t,np.sin(t))

ax2.plot(t,np.cos(t));

 

plt.gcf().set_size_inches(8, 4)  # changes figure size in inches

 

fig.show()

 

 

 

Setting x,y range

 

 

Setting x,y range for plt plot

 

The way to set x,y range is slighly different depending on how you plot.

 

import numpy as np

import matplotlib.pyplot as plt

x = np.arange(0, 2*np.pi, 0.1);

y = np.sin(x);

plt.plot(x, y)

plt.xlim([0,2*np.pi]);

plt.ylim([-2,2]);

plt.show()

 

 

Setting x, y range for axes plot

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

 

rect1 = [0.1, 0.5, 0.8, 0.4];

rect2 = [0.1, 0.1, 0.8, 0.3];

 

ax1 = fig.add_axes(rect1)

ax1.set_xlim([0,4*np.pi]);

ax1.set_ylim([-2,2]);

 

ax2 = fig.add_axes(rect2)

ax2.set_xlim([0,2*np.pi]);

ax2.set_ylim([-2,2]);

 

t = np.linspace(0, 10, 40)

ax1.plot(2*t,np.sin(t))

ax2.plot(t,np.cos(t));

 

fig.show()

 

 

 

 

Formatting Axis Tick Label

 

 

Formatting Number in Scientific format

 

import numpy as np

import matplotlib.pyplot as plt

 

x = np.linspace(0,1000,100);

plt.plot(x,np.exp(0.01*x));

plt.ticklabel_format(axis="y", style="sci", scilimits=(0,0))

plt.show()

 

 

 

Marker Format - Color, Size etc

 

 

Marker Format - Size, Face Color

 

import numpy as np

import matplotlib.pyplot as plt

 

x = np.linspace(0,4,10);

plt.plot(x,np.exp(x),'o',

         markersize=10,

         markerfacecolor='red');

plt.show()

 

 

Marker Format - Edge Color, Edge Width

 

import numpy as np

import matplotlib.pyplot as plt

 

x = np.linspace(0,4,10);

plt.plot(x,np.exp(x),'o',

         markersize=10,

         markerfacecolor='red',

         markeredgecolor='blue',

         markeredgewidth=2);

plt.show()

 

 

 

Ticks and Tick Labels

 

 

Setting User Defined Tikcs

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.xticks(ticks=[0,0.5*pi,pi,1.5*pi,2*pi]);

plt.show()

 

 

Setting User Defined Tick Label

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.xticks(ticks=[0,0.5*pi,pi,1.5*pi,2*pi],labels=["0","0.5*pi","pi","1.5*pi","2*pi"]);

plt.show()

 

 

Rotating Tick Label Text

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.xticks(ticks=[0,0.5*pi,pi,1.5*pi,2*pi],labels=["0","0.5*pi","pi","1.5*pi","2*pi"]);

plt.xticks(rotation=45);

plt.show()

 

 

 

Line Thicknenss

 

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-',linewidth = 1);

plt.plot(x,np.cos(x),'b-',linewidth = 3);

 

plt.show()

 

 

 

Line Color

 

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.plot(x,np.sin(2*x),color='lightcoral');

plt.plot(x,np.sin(3*x),color='#00FF00');

 

plt.show()

 

 

 

Line Style

 

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.plot(x,np.sin(2*x),'b--');

plt.plot(x,np.sin(3*x),linestyle=(0,(5,2,1,2))); # (offset,(0n,Off,On,Off))

plt.plot(x,np.sin(4*x),linestyle=(10,(5,2,3,2))); # (offset,(0n,Off,On,Off))

 

plt.show()

 

 

 

Legend

 

 

Legend - Default

 

Adding a legend is simple.. it is just call legend(), but you should specify the label for each plot and that label will appear in the legend box.

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-',label='sin(x)');

plt.plot(x,np.sin(2*x),color='lightcoral',label='sin(2 x)');

plt.plot(x,np.sin(3*x),color='#555555',label='sin(3 x)');

plt.legend();

plt.show()

 

 

Legend with specified label

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.plot(x,np.sin(2*x),color='lightcoral');

plt.plot(x,np.sin(3*x),color='#555555');

plt.legend(['sin(x)', 'sin(2 x)', 'sin(3 x)']);

plt.show()

 

 

Legend at the specified location

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.plot(x,np.sin(2*x),color='lightcoral');

plt.plot(x,np.sin(3*x),color='#555555');

plt.legend(['sin(x)', 'sin(2 x)', 'sin(3 x)'], loc = 'lower left');

plt.show()

 

 

Legend - Horizontal Direction

 

import numpy as np

import matplotlib.pyplot as plt

 

pi = np.pi;

x = np.linspace(0,2*np.pi,60);

plt.plot(x,np.sin(x),'b-');

plt.plot(x,np.sin(2*x),color='lightcoral');

plt.plot(x,np.sin(3*x),color='#555555');

plt.legend(['sin(x)', 'sin(2 x)', 'sin(3 x)'], loc = 'lower center', ncol = 3);

plt.show()

 

 

 

Turning Off Frame

 

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

 

rect1 = [0.1, 0.1, 0.8, 0.8];

ax1 = fig.add_axes(rect1);

 

t = np.linspace(0, 10, 40)

ax1.plot(t,np.sin(t))

ax1.set(frame_on=False)

ax1.set_xticks([]);

ax1.set_yticks([]);

 

fig.show()

 

 

 

import matplotlib.pyplot as plt

import numpy as np

 

t = np.linspace(0, 10, 40)

 

plt.plot(t,np.sin(t))

plt.box(False);

plt.xticks([]);

plt.yticks([]);

 

plt.show()

 

 

 

Adding Secondary Axis

 

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

 

rect1 = [0.2, 0.2, 0.6, 0.6];

ax1 = fig.add_axes(rect1);

 

t = np.linspace(0, 10, 40)

 

ax1.plot(t,np.sin(t), 'r-')

ax1.set_ylabel('sin(t)',color='red');

 

ax2 = ax1.twinx();

ax2.plot(t,np.exp(t), 'b-');

ax2.set_ylabel('exp(t)',color='blue');

 

fig.show()

 

 

import matplotlib.pyplot as plt

import numpy as np

 

fig = plt.figure()

 

rect1 = [0.2, 0.2, 0.6, 0.6];

ax1 = fig.add_axes(rect1);

 

t1 = np.linspace(0, 10, 40)

t2 = np.linspace(0, 10, 20)

 

ax1.plot(t1,np.sin(t1), 'r-')

ax1.scatter(t1,np.sin(t1), s = 16, c = 'red');

ax1.set_ylabel('sin(t)',color='red');

 

ax2 = ax1.twinx();

ax2.plot(t2,np.exp(t2), 'b-');

ax2.scatter(t2,np.exp(t2), s = 16, c = 'blue');

ax2.set_ylabel('exp(t)',color='blue');

 

fig.show()

 

 

 

Stacked Plot

 

 

Stacked Plot - Default

 

import numpy as np

import matplotlib.pyplot as plt

 

y1 = [1,4,3,5,3];

y2 = [12,2,8,2,1];

y3 = [4,10,5,1,8];

x=range(1,6);

 

plt.stackplot(x,[y1,y2,y3]);

plt.show();

 

 

Stacked Plot with Legend

 

import numpy as np

import matplotlib.pyplot as plt

 

y1 = [1,4,3,5,3];

y2 = [12,2,8,2,1];

y3 = [4,10,5,1,8];

x=range(1,6);

 

plt.stackplot(x,[y1,y2,y3],labels=['Y1','Y2','Y3']);

plt.legend(loc='upper right')

plt.show();

 

 

 

Histogram

 

 

Histogram with frequencies / Default Bins

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

r = randn(5000);

 

plt.hist(r);

plt.xlim([-6,6]);

plt.show();

 

 

Histogram with frequencies / User defined bins

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

r = randn(5000);

 

bins = np.linspace(-6,6,50);

plt.hist(r,bins);

plt.xlim([-6,6]);

plt.show();

 

 

Histogram with probability desity

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

r = randn(5000);

 

bins = np.linspace(-6,6,50);

plt.hist(r,bins,density=True);

plt.xlim([-6,6]);

plt.show();

 

 

Histogram - Constrolling Bar Spacing

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

r = randn(5000);

 

bins = np.linspace(-6,6,50);

plt.hist(r,bins,rwidth=0.9,density=True);

plt.xlim([-6,6]);

plt.show();

 

 

 

Histogram 2D

 

 

Histogram 2D - Default

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(10000);

y = 2 * x + 2*randn(10000);

 

plt.hist2d(x,y);

plt.xlim([-6,6]);

plt.show();

 

 

Histogram 2D - x, y bins

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(10000);

y = 2 * x + 2*randn(10000);

 

xbin = np.linspace(-6,6,40);

ybin = np.linspace(-10,10,40);

 

plt.hist2d(x,y,bins=[xbin,ybin]);

plt.xlim([-6,6]);

plt.show();

 

 

Histogram 2D - Probability Density

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(10000);

y = 2 * x + 2*randn(10000);

 

xbin = np.linspace(-6,6,40);

ybin = np.linspace(-10,10,40);

 

plt.hist2d(x,y,bins=[xbin,ybin],density=True);

plt.xlim([-6,6]);

plt.show();

 

 

Histogram 2D - Setting the lower boundary

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(10000);

y = 2 * x + 2*randn(10000);

 

xbin = np.linspace(-6,6,40);

ybin = np.linspace(-10,10,40);

 

plt.hist2d(x,y,bins=[xbin,ybin],density=True, cmin = 0.001);

plt.xlim([-6,6]);

plt.show();

 

 

Histogram 2D - Setting the upper boundary

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(10000);

y = 2 * x + 2*randn(10000);

 

xbin = np.linspace(-6,6,40);

ybin = np.linspace(-10,10,40);

 

plt.hist2d(x,y,bins=[xbin,ybin],density=True, cmax = 0.02);

plt.xlim([-6,6]);

plt.show();

 

 

 

Scatter Plot

 

 

Scatter Plot - Default

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(500);

y = randn(500);

 

plt.scatter(x,y);

plt.xlim([-5,5]);

plt.ylim([-5,5]);

plt.show();

 

 

Scatter Plot - Setting Marker Color

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(500);

y = randn(500);

 

plt.scatter(x,y-1,s=3,c='red');

plt.scatter(x+1,y+1,s=4,c='blue');

plt.scatter(x-1,y+1,s=4,c='green');

plt.xlim([-5,5]);

plt.ylim([-5,5]);

plt.show();

 

 

Scatter Plot - Setting Marker Size

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(200);

y = randn(200);

z = range(200);

 

plt.scatter(x,y,s=30,c=z);

plt.xlim([-5,5]);

plt.ylim([-5,5]);

plt.show();

 

 

import matplotlib.pyplot as plt

import numpy as np

from numpy.random import seed

from numpy.random import randn

 

seed(1)

 

x = randn(200);

y = randn(200);

z = range(200);

 

plt.scatter(2*x,2*y,s=z,c=z);

plt.xlim([-5,5]);

plt.ylim([-5,5]);

plt.show();

 

 

 

Filled Polygon

 

 

Filled Polygon - Default

 

import matplotlib.pyplot as plt

 

px = [-1.0, 0.5, 0.6,  1.0];

py = [-1.0, 1.0, 0.0, -1.0];

 

plt.fill(px,py);

plt.show();

 

 

Filled Polygon - Face Color, Line Color, LineWidth

 

import matplotlib.pyplot as plt

 

px = [-1.0, 0.5, 0.6,  1.0];

py = [-1.0, 1.0, 0.0, -1.0];

 

plt.fill(px,py,facecolor='green', edgecolor='red', linewidth=3);

plt.show();

 

 

Filled Polygon - No Fill

 

import matplotlib.pyplot as plt

import numpy as np

 

px = [2.0, 2.0, 4.0, 4.0];

py = [-1.0, 1.0, 1.0, -1.0];

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.plot(t,np.sin(t),'b-',t,np.sin(2*t),'b--')

plt.fill(px,py,facecolor='none', edgecolor='red', linewidth=3);

plt.xlabel('t')

plt.ylabel('sin(t)')

plt.show();

 

 

Filled Polygon - Transparency

 

import matplotlib.pyplot as plt

import numpy as np

 

px = [2.0, 2.0, 4.0, 4.0];

py = [-1.0, 1.0, 1.0, -1.0];

 

pi = np.pi;

t = np.linspace(0,2*pi,80);

 

plt.plot(t,np.sin(t),'b-',t,np.sin(2*t),'b--')

plt.fill(px,py,facecolor='green', edgecolor='red', linewidth=3, alpha = 0.25);

plt.xlabel('t')

plt.ylabel('sin(t)')

plt.show();

 

 

 

Reference :

 

[1] Matplotlib tutorial (Nicolas P. Rougier)