Adding a secondary x or y axis in matplotlib can be done in several ways. Examples:
Using twinx() or twiny() methods
Suppose we have a histogram created from randomly generated numbers that follow a gamma distribution. We aim to include a secondary y-axis to display the cumulative density function.
import matplotlib.pyplot as pltimport numpy as npnp.random.seed(42)shape = 3.0scale = 1.0nb_random_points = 10000data = np.random.gamma(shape, scale, nb_random_points)plt.hist(data,bins=40)plt.title('How to plot a figure with two different axes in matplotlib ? ')plt.savefig('plot_a_figure_with_two_different_axes_in_matplotlib_01.png')plt.show()
Output

Now we can add a secondary y-axis by using the twinx() method:
ax2 = ax.twinx()
which create another plot with a shared x-axis. Illustration
from scipy.stats import gammaimport numpy as npnp.random.seed(42)shape = 3.0scale = 1.0nb_random_points = 10000data = np.random.gamma(shape, scale, nb_random_points)fig, ax1 = plt.subplots()ax1.hist(data,bins=40)ax1.set_ylabel('Counts')ax2 = ax1.twinx()X = np.linspace(0,16,100)CDF = gamma.cdf(X, shape, 0, scale)ax2.plot(X,CDF,color='coral')ax2.set_ylabel('CDF', color='coral')ax2.tick_params(axis='y', labelcolor='coral')plt.grid()fig.tight_layout()plt.title('How to plot a figure with two different axes in matplotlib ? ')plt.savefig('plot_a_figure_with_two_different_axes_in_matplotlib_02.png')plt.show()
Output

Using secondary_xaxis() or secondary_yaxis()
Another approach is to use secondary_yaxis(), Example:
import matplotlib.pyplot as pltimport numpy as npheights = np.linspace(0,100,100) # Poundsweights = np.exp( heights * 0.04 ) # inchesfig, ax = plt.subplots()ax.plot(heights,weights)ax.set_xlabel('heights (inches)')ax.set_ylabel('Weight (Pounds)')def convert_pound_to_kilogram(weights):return 0.453592 * weightsdef convert_kilogram_to_pound(weights):return weights / 0.453592secax_y2 = ax.secondary_yaxis('right', functions=(convert_pound_to_kilogram, convert_kilogram_to_pound))secax_y2.set_ylabel('Weight (Kilograms)')ax.grid()plt.title('How to plot a figure with two different axes in matplotlib ? ')plt.savefig('plot_a_figure_with_two_different_axes_in_matplotlib_03.png')plt.show()
Output

References
| Links | Site |
|---|---|
| matplotlib.axes.Axes.secondary_xaxis | matplotlib.org |
| Secondary Axis | matplotlib.org |
| Plots with different scales | matplotlib.org |
