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 plt
import numpy as np
np.random.seed(42)
shape = 3.0
scale = 1.0
nb_random_points = 10000
data = 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 gamma
import numpy as np
np.random.seed(42)
shape = 3.0
scale = 1.0
nb_random_points = 10000
data = 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 plt
import numpy as np
heights = np.linspace(0,100,100) # Pounds
weights = np.exp( heights * 0.04 ) # inches
fig, 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 * weights
def convert_kilogram_to_pound(weights):
return weights / 0.453592
secax_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 |