The aspect ratio of a matplotlib plot refers to the aspect of the axis scaling, i.e. the ratio of y-unit to x-unit.
This ratio can be modified by using the matplotlib.axes.Axes.set_aspect() function.
Under the hood, the set_aspect() function actually modifies something known as the data coordinate system but in practice we typically want to modify the display coordinate system.
To make this conversion easy, we can use this bit of code:
#define y-unit to x-unit ratio ratio = 1.0 #get x and y limits x_left, x_right = ax.get_xlim() y_low, y_high = ax.get_ylim() #set aspect ratio ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)
Let’s walk through an example of using this function in practice.
Step 1: Create a Basic Matplotlib Plot
First, let’s create a simple line chart using Matplotlib:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt.subplots() #create simple line plot ax.plot([0, 10],[0, 20]) #display plot plt.show()
Step 2: Set the Aspect Ratio (The Wrong Way)
Notice that the x-axis is longer than the y-axis. Let’s attempt to set the aspect ratio to 1, i.e. the x-axis and y-axis should be equal:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt.subplots() #create simple line plot ax.plot([0, 10],[0, 20]) #attempt to set aspect ratio to 1 ax.set_aspect(1) #display plot plt.show()
Notice that this did not work as we expected. The y-axis is much longer than the x-axis.
Step 3: Set the Aspect Ratio (The Right Way)
The following code shows how to use a simple calculation to set the correct aspect ratio:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt.subplots() #create simple line plot ax.plot([0, 10],[0, 20]) #set aspect ratio to 1 ratio = 1.0 x_left, x_right = ax.get_xlim() y_low, y_high = ax.get_ylim() ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio) #display plot plt.show()
Notice that this plot has the aspect ratio we expected. The x-axis and y-axis are equal lengths.
Step 4: Adjust the Aspect Ratio to Whatever You’d Like
If we’d like the y-axis to be longer than the x-axis, we can simply specify the aspect ratio to be some number greater than 1:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt.subplots() #create simple line plot ax.plot([0, 10],[0, 20]) #set aspect ratio to 3 ratio = 3 x_left, x_right = ax.get_xlim() y_low, y_high = ax.get_ylim() ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio) #display plot plt.show()
And if we’d like the y-axis to be shorter than the x-axis, we can simply specify the aspect ratio to be some number less than 1:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt.subplots() #create simple line plot ax.plot([0, 10],[0, 20]) #set aspect ratio to .3 ratio = .3 x_left, x_right = ax.get_xlim() y_low, y_high = ax.get_ylim() ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio) #display plot plt.show()
You can find more Matplotlib tutorials here.