Matplotlib - Twin Axes



Twin axes in Matplotlib refer to the creation of two independent axes that share either the x-axis or the y-axis scales, enabling the display of a plot with two sets of data having different scales on the same axes. This technique is particularly useful when you want to visualize two datasets on the same plot, but they have significantly different scales.

See the below image for reference −

Twin_Axes_Intro

In the above image, you can observe that two y-axes share the same x-axis, allowing us to compare the sin(x) and exp(x) datasets on the same plot with different y-axis scales.

Matplotlib's Axes class provides the twinx() and twiny() methods to create twin axes that share the same x-axis or y-axis, respectively.

Creating Twin Axes Sharing X-Axis

The Axes.twinx() method is used to create a set of twin axes sharing the x-axis. It generates a new set of axes with an invisible x-axis and an independent y-axis positioned opposite to the original one (i.e., at the right). The x-axis autoscale setting is inherited from the original axes.

Example

Here is an example that demonstrates how to use the twinx() method to create plots with different scales on the same set of axes.

 import matplotlib.pyplot as plt import numpy as np # Create the input data x = np.linspace(0, 10, 100) # First Dataset y1 = np.sin(x) # Second Dataset y2 = np.exp(x/1.5) # Create the main set of axes fig, ax1 = plt.subplots(figsize=(7, 4)) # Plot the first dataset on the left y-axis ax1.plot(x, y1, color='blue', label='Sin(x)') ax1.set_xlabel('X-axis') ax1.set_ylabel('Left Y-axis', color='blue') ax1.tick_params('y', colors='blue') # Create a set of twin axes sharing the same x-axis ax2 = ax1.twinx() # Plot the second dataset on the right y-axis ax2.plot(x, y2, color='red', label='Exp(x)') ax2.set_ylabel('Right Y-axis', color='red') ax2.tick_params('y', colors='red') # Add legends for both datasets ax1.legend(loc='upper left') ax2.legend(loc='upper right') # Display the plot plt.title('Matplotlib Twin Axes Example') plt.show() 

Output

On executing the above code we will get the following output −

twin_axes_ex1

Example

Here is an example that shares secondary Y-axis between subplots in Matplotlib

 import numpy as np import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True # Generate sample data x = np.linspace(-2, 2, 10) # Create subplots and their twinned axes ax0 = plt.subplot(211) ax1 = ax0.twinx() # Create a twin of Axes with a shared x-axis but independent y-axis. ax2 = plt.subplot(212) ax3 = ax2.twinx() # Create a twin of Axes with a shared x-axis but independent y-axis. # Join the twinned axes for sharing secondary Y-axis ax1.get_shared_y_axes().join(ax1, ax3) # Plot data on each subplot and twinned axes c1, = ax0.plot(x, np.sin(x), c='red') c2, = ax1.plot(x, np.cos(x), c='blue') c3, = ax2.plot(x, np.tan(x), c='green') c4, = ax3.plot(x, np.exp(x), c='yellow') # Add legend plt.legend([c1, c2, c3, c4], ["y=sin(x)", "y=cos(x)", "y=tan(x)", "y=exp(x)"], loc="upper left", bbox_to_anchor=(0.070, 2.25)) # Display the plot plt.show() 

Output

On executing the above code you will get the following output −

twin_axes_ex3

Creating Twin Axes Sharing Y-Axis

If you want to share the y-axis while maintaining independent x-axes, you can use Axes.twiny() method. This method creates a set of twin axes that share the y-axis, with an invisible y-axis and an independent x-axis positioned opposite to the original one (i.e., at the top). The y-axis autoscale setting is inherited from the original axes.

Example

Here is an example that demonstrates how to use the twiny() method to create plots with different scales on the same set of axes.

 import matplotlib.pyplot as plt import numpy as np # First Dataset x1 = np.linspace(0, 10, 100) y = np.sin(x1) # Second Dataset x2 = np.linspace(0, 7, 50) z = np.cos(x2) # Create the main set of axes fig, ax1 = plt.subplots(figsize=(7, 4)) # Plot the first dataset on the bottom x-axis ax1.plot(x1, y, color='blue', label='Sin(x)') ax1.set_xlabel('Bottom X-axis') ax1.set_ylabel('Y-axis', color='blue') ax1.tick_params('y', colors='blue') # Create a set of twin axes sharing the same y-axis ax2 = ax1.twiny() # Plot the second dataset on the top x-axis ax2.plot(x2, z, color='red', label='Cos(x)') ax2.set_xlabel('Top X-axis', color='red') ax2.tick_params('x', colors='red') # Add legends for both datasets ax1.legend(loc='upper left') ax2.legend(loc='upper right') # Display the plot plt.title('Matplotlib Twiny Axes Example') plt.show() 

Output

On executing the above code we will get the following output −

twin_axes_ex2
Advertisements