# Make a Square Plot With Equal Axes in Matplotlib

Suraj Joshi Jan 03, 2023 May 01, 2020 Matplotlib Matplotlib Axes

We can set the aspect ratio of a plot using the `set_aspect()` method to make it a square plot and `axis()` method can also be used to make a square plot with equal axes in Matplotlib.

## `set_aspect()` to Make a Square Plot With Equal Axes

We can set the aspect ratio using `matplotlib.axes.Axes.set_aspect()` function. If we use `"equal"` as an aspect ratio in the function, we get a plot with the same scaling from data points to plot units for X-axis and Y-axis.

``````import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3,3,100)
y = np.sin(x)

fig = plt.figure()

plt.plot(x, y)
plt.xlim(-3,3)
plt.ylim(-3,3)

plt.xlabel("x")
plt.ylabel("sinx")

plt.show()
`````` ``````plt.xlim(-3,3)
plt.ylim(-3,3)

ax.set_aspect('equal')
``````

It sets both X-axis and Y-axis to have the same range. Then `ax.set_aspect('equal')` sets both axes to be equal.

The above method only yields a square plot when ranges for both axes are set to be the same. To generate a square plot in the general case, we have to manually set the aspect ratio using the following command:

``````axes.set_aspect(1./axes.get_data_ratio())
``````

`axes.get_data_ratio()` gets the ratio of the raw plot data. The value of its reciprocal is passed to `set_aspect()` to make axes equal without setting the limits of axes manually.

Code:

``````import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3,3,100)
y = np.sin(x)

fig = plt.figure()

plt.plot(x, y)

plt.xlabel("x")
plt.ylabel("sinx")
plt.show()
`````` ## `axis()` Method to Generate Square Plot

If we pass `"square"` as an argument to `matplotlib.pyplot.axis()`, it creates a square plot where the ranges for both axes occupy are equal to the length in plot.

``````import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-3,3,100)
y=np.sin(x)
plt.plot(x, y)
plt.axis('square')
plt.xlabel("x")
plt.ylabel("sinx")
plt.show()
`````` Warning
The range of axes in this solution are selected automatically. It is equal to `ax.set_aspect('equal', adjustable='datalim')`. The explicit axis limits set by the user are not respected.
Author: Suraj Joshi

Suraj Joshi is a backend software engineer at Matrice.ai.