matplotlib 绘制椭球体

vddsk6oq  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(100)

我有三个数字代表长度。每个数字是对象在x、y和z轴上的长度。我想表示的对象(可能)是一个变形的球体。
如何通过指定这3个长度来3D打印此对象?
我想从这个开始:


的数据
例如,对于这样的东西(我只是放大了图片):



我尝试使用以下代码(来自Ellipsoid creation in Python)并使用x,y和z的定义:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

phi = np.linspace(0,2*np.pi, 256).reshape(256, 1) # the angle of the projection in the xy-plane
theta = np.linspace(0, np.pi, 256).reshape(-1, 256) # the angle from the polar axis, ie the polar angle
radius = 4

# Transformation formulae for a spherical coordinate system.
x = radius*np.sin(theta)*np.cos(phi)
y = radius*np.sin(theta)*np.sin(phi)
z = radius*np.cos(theta)

fig = plt.figure(figsize=plt.figaspect(1))  # Square figure
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, color='b')

字符串
但我不能得到我想要的。你能给予我一下吗?

okxuctiv

okxuctiv1#

1.对于xyz坐标,应使用不同的半径
1.要实际查看效果,请使用ax.set_aspect(1.0),否则绘图视图将缩小为球体
1.(要使椭圆体不与轴对齐/零居中:在xyz上使用旋转和/或平移)

9bfwbjaz

9bfwbjaz2#

下面是代码的修改版本。“我在x坐标的数据中添加了比例,并指定了框的纵横比。

import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator
import numpy as np

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

phi = np.linspace(0,2*np.pi, 256).reshape(256, 1) # the angle of the projection in the xy-plane
theta = np.linspace(0, np.pi, 256).reshape(-1, 256) # the angle from the polar axis, ie the polar angle
radius = 4

# Transformation formulae for a spherical coordinate system.
ratio=3
x = ratio*radius*np.sin(theta)*np.cos(phi)
y = radius*np.sin(theta)*np.sin(phi)
z = radius*np.cos(theta)

fig = plt.figure()  # Square figure
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, color='b')
ax.set_box_aspect([ratio,1,1])

字符串

相关问题