 # Plotting with Matplotlib

Plotting with Matplotlib

Matplotlib (https://matplotlib.org/) is a library for 2D plotting based on NumPy. Here are some basic examples. More examples can be found in the oﬃcial documentation (https://matplotlib.org/2.0.2/gallery.html and https://matplotlib.org/2.0.2/examples/index.html)

## Plotting with Matplotlib: Plots with Common X-axis but di erent Y-axis :Using twinx()

In this example, we will plot a sine curve and a hyperbolic sine curve in the same plot with a common x-axis having diﬀerent y-axis. This is accomplished by the use of twinx() command.

`Plotting tutorials in PythonAdding Multiple plots by twin x axisGood for plots having different y axis rangeSeparate axes and figure objectsreplicate axes object and plot curvesuse axes to set attributesNote:Grid for second curve unsuccessful : let me know if you find it! :(import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 2.0*np.pi, 101)y = np.sin(x)z = np.sinh(x)separate the figure object and axes objectfrom the plotting objectfig, ax1 = plt.subplots()Duplicate the axes with a different y axisand the same x axisax2 = ax1.twinx() # ax2 and ax1 will have common x axis and different y axisplot the curves on axes 1, and 2, and get the curve handles curve1, = ax1.plot(x, y, label="sin", color='r')curve2, = ax2.plot(x, z, label="sinh", color='b')Make a curves list to access the parameters in the curves curves = [curve1, curve2]add legend via axes 1 or axes 2 object.one command is usually sufficientax1.legend() # will not display the legend of ax2ax2.legend() # will not display the legend of ax1 ax1.legend(curves, [curve.get_label() for curve in curves])ax2.legend(curves, [curve.get_label() for curve in curves]) # also validGlobal figure propertiesplt.title("Plot of sine and hyperbolic sine")plt.show()`

## Plotting with Matplotlib: Plots with common Y-axis and di erent X-axis using twiny()

In this example, a plot with curves having common y-axis but diﬀerent x-axis is demonstrated using twiny() method. Also, some additional features such as the title, legend, labels, grids, axis ticks and colours are added to the plot.

`Plotting tutorials in PythonAdding Multiple plots by twin y axisGood for plots having different x axis rangeSeparate axes and figure objectsreplicate axes object and plot curvesuse axes to set attributesimport numpy as npimport matplotlib.pyplot as plty = np.linspace(0, 2.0*np.pi, 101)x1 = np.sin(y)x2 = np.sinh(y)values for making ticks in x and y axis ynumbers = np.linspace(0, 7, 15) xnumbers1 = np.linspace(-1, 1, 11) xnumbers2 = np.linspace(0, 300, 7)separate the figure object and axes objectfrom the plotting objectfig, ax1 = plt.subplots()`
`Duplicate the axes with a different x axisand the same y axisax2 = ax1.twiny() # ax2 and ax1 will have common y axis and different x axisplot the curves on axes 1, and 2, and get the axes handles curve1, = ax1.plot(x1, y, label="sin", color='r') curve2, = ax2.plot(x2, y, label="sinh", color='b')Make a curves list to access the parameters in the curves curves = [curve1, curve2]add legend via axes 1 or axes 2 object.one command is usually sufficientax1.legend() # will not display the legend of ax2ax2.legend() # will not display the legend of ax1ax1.legend(curves, [curve.get_label() for curve in curves]) ax2.legend(curves, [curve.get_label() for curve in curves]) # also validx axis labels via the axesax1.set_xlabel("Magnitude", color=curve1.get_color())ax2.set_xlabel("Magnitude", color=curve2.get_color())`

## y axis label via the axes

`ax1.set_ylabel("Angle/Value", color=curve1.get_color())ax2.set_ylabel("Magnitude", color=curve2.get_color()) # does not workax2 has no property control over y axisy ticks - make them coloured as wellax1.tick_params(axis='y', colors=curve1.get_color())ax2.tick_params(axis='y', colors=curve2.get_color()) # does not workax2 has no property control over y axisx axis ticks via the axesax1.tick_params(axis='x', colors=curve1.get_color())ax2.tick_params(axis='x', colors=curve2.get_color())`

## set x ticks

`ax1.set_xticks(xnumbers1)ax2.set_xticks(xnumbers2)`

## set y ticks

`ax1.set_yticks(ynumbers)ax2.set_yticks(ynumbers) # also worksGrids via axes 1 # use this if axes 1 is used todefine the properties of common x axisax1.grid(color=curve1.get_color())To make grids using axes 2ax1.grid(color=curve2.get_color())ax2.grid(color=curve2.get_color())ax1.xaxis.grid(False)`

## Global figure properties

plt.title(“Plot of sine and hyperbolic sine”)
plt.show()

## Plotting with Matplotlib: A Simple Plot in Matplotlib

This example illustrates how to create a simple sine curve using Matplotlib

`Plotting tutorials in PythonLaunching a simple plotimport numpy as npimport matplotlib.pyplot as pltangle varying between 0 and 2pi x = np.linspace(0, 2.0np.pi, 101)y = np.sin(x) # sine functionplt.plot(x, y)plt.show()`

## Adding more features to a simple plot : axis labels, title, axis ticks, grid, and legend

In this example, we take a sine curve plot and add more features to it; namely the title, axis labels, title, axis ticks, grid and legend.

`Plotting tutorials in PythonEnhancing a plotimport numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 2.0*np.pi, 101)y = np.sin(x)values for making ticks in x and y axis xnumbers = np.linspace(0, 7, 15) ynumbers = np.linspace(-1, 1, 11)plt.plot(x, y, color='r', label='sin') # r - red colour plt.xlabel("Angle in Radians") plt.ylabel("Magnitude")plt.title("Plot of some trigonometric functions")plt.xticks(xnumbers)plt.yticks(ynumbers)plt.legend()plt.grid()plt.axis([0, 6.5, -1.1, 1.1]) # [xstart, xend, ystart, yend] plt.show()`

## Making multiple plots in the same figure by superimposition similar to MATLAB

In this example, a sine curve and a cosine curve are plotted in the same figure by superimposing the plots on top of each other.

`Plotting tutorials in PythonAdding Multiple plots by superimpositionGood for plots sharing similar x, y limitsUsing single plot command and legendimport numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 2.0*np.pi, 101)y = np.sin(x)z = np.cos(x)values for making ticks in x and y axis xnumbers = np.linspace(0, 7, 15) ynumbers = np.linspace(-1, 1, 11)plt.plot(x, y, 'r', x, z, 'g') # r, g - red, green colour plt.xlabel("Angle in Radians") plt.ylabel("Magnitude")plt.title("Plot of some trigonometric functions")plt.xticks(xnumbers)plt.yticks(ynumbers)plt.legend(['sine', 'cosine'])plt.grid()`
`plt.axis([0, 6.5, -1.1, 1.1]) # [xstart, xend, ystart, yend] plt.show()`

## Making multiple Plots in the same figure using plot superimposition with separate plot commands

Similar to the previous example, here, a sine and a cosine curve are plotted on the same figure using separate plot commands. This is more Pythonic and can be used to get separate handles for each plot.

```Plotting tutorials in Python
Good for plots sharing similar x, y limits
Using multiple plot commands
Much better and preferred than previous
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2.0*np.pi, 101)
y = np.sin(x)
z = np.cos(x)
values for making ticks in x and y axis xnumbers = np.linspace(0, 7, 15) ynumbers = np.linspace(-1, 1, 11)
plt.plot(x, y, color='r', label='sin') # r - red colour plt.plot(x, z, color='g', label='cos') # g - green colour plt.xlabel("Angle in Radians") plt.ylabel("Magnitude")```
`plt.title("Plot of some trigonometric functions")plt.xticks(xnumbers)plt.yticks(ynumbers)plt.legend()plt.grid()plt.axis([0, 6.5, -1.1, 1.1]) # [xstart, xend, ystart, yend] plt.show()`