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.
- plot
- multiple graphs in single plot
- subplot
- Multiplot with multiple axis
- Setting the size of a figure window
- Setting x,y range
- Formating axis tick label
- Marker Format - Color, Size etc
- Ticks, Tick Labels
- Line Thickness
- Line Color
- Line Style
- legend
- Legend - Default
- Legend with specified label
- Legend at the specified location
- Legend - Horizontal Direction
- Turning Off Frame
- Adding Secondary Axis
- Stacked Plot
- Histogram
- Histogram with frequencies / Default Bins
- Histogram with frequencies / User defined bins
- Histogram with probability desity
- Histogram - Constrolling Bar Spacing
- Histogram 2D
- Histogram 2D - Default
- Histogram 2D - x, y bins
- Histogram 2D - Probability Density
- Histogram 2D - Setting the lower boundary
- Histogram 2D - Setting the upper boundary
- Scatter Plot
- Filled Polygon
NOTE : To use matplotlib you need to install matplotlib package first. For the package installation, refer to here.
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.
|
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(); |

|
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(); |

|
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(); |

|
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(); |

|
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();
|

|
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() |

|
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() |
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 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 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() |

|
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() |

|
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() |

|
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() |

|
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() |

|
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() |

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() |

|
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() |

|
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() |

|
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() |

|
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() |

|
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(); |

|
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 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(); |

|
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(); |

|
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(); |

|
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(); |

|
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(); |

|
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(); |

|
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)