Home > database >  How to get the plot of 3D geometry with equal axes in python using matplotlib?
How to get the plot of 3D geometry with equal axes in python using matplotlib?

Time:11-09

I am facing a problem to plot the geometry in the python using matplotlib. I would like to have a plot which can have the equal lenth in all three axes (X, Y, Z). I have written below code but it does not show any equal axes in the obtained geometry.

How can I get the plot with equal axes?

def plotting(x, y, z, figname):
    fig = plt.figure(figsize = (50,50))
    ax = plt.axes(projection='3d')
    ax.grid()

    ax.scatter(x, y, z, c = 'r', s = 50)
    ax.set_title(figname)

    ax.set_xlabel('x', labelpad=20)
    ax.set_ylabel('y', labelpad=20)
    ax.set_zlabel('z', labelpad=20)

CodePudding user response:

Matplotlib makes this very difficult. One way you could "achieve" that is by setting the same limits to xlim, ylim, zlim:

import numpy as np
import matplotlib.pyplot as plt

n = 1000
t = np.random.uniform(0, 2*np.pi, n)
p = np.random.uniform(0, 2*np.pi, n)
x = (4   np.cos(t)) * np.cos(p)
y = (1.5   np.cos(t)) * np.sin(p)
z = np.sin(t)

fig = plt.figure()
ax = fig.add_subplot(projection="3d")
ax.scatter(x, y, z)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_zlim(-4, 4)
plt.show()

Otherwise, your best bet is to use a different plotting library for 3D plots. Plotly allows to easily set equal aspect ratio. K3D-Jupyter and Mayavi uses equal aspect ratio by default.

  • Related