如何在Python中缩放极坐标绘制的球体至指定半径?
问题
需要缩放通过极坐标绘制的3D球体尺寸:
- 原代码中定义了
r变量但未实际使用,修改r无法改变球体大小,球体本质是单位球(半径1),视觉显示偏小 - 期望将球体半径设为50,尝试将x、y、z坐标乘以100并增加采样点后,尺寸达到要求,但视觉上球体不够规整,不确定z轴是否与x、y轴同比例缩放
附原代码与修改后代码:
原代码
import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True fig = plt.figure() ax = fig.add_subplot(projection='3d') r = 0.05 u, v = np.mgrid[0:2 * np.pi:30j, 0:np.pi:20j] x = np.cos(u) * np.sin(v) y = np.sin(u) * np.sin(v) z = np.cos(v) ax.plot_surface(x, y, z, cmap=plt.cm.YlGnBu_r) plt.show()
修改后代码
import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [10.00, 40.50] plt.rcParams["figure.autolayout"] = False fig = plt.figure() ax = fig.add_subplot(projection='3d') ax.axes.set_xlim3d(left=-100, right=100) ax.axes.set_ylim3d(bottom=-100, top=100) ax.axes.set_zlim3d(bottom=-100, top=100) r = 50 u, v = np.mgrid[0:2 * np.pi:300j, 0:np.pi:300j] x = 100*(np.cos(u) * np.sin(v)) y = 100*(np.sin(u) * np.sin(v)) z = 100*(np.cos(v)) ax.plot_surface(x, y, z, rstride= 5, cstride = 5, cmap=plt.cm.YlGnBu_r) plt.show()
问题分析与解决方案
核心问题
- 原代码的
r变量未参与坐标计算,生成的是单位球(x、y、z范围均为[-1,1]),修改r自然无效 - 修改后代码乘以100得到的是半径100的球体,而非期望的50
- 视觉上球体不规整是因为matplotlib 3D绘图默认轴比例不一致,导致x、y、z轴缩放比例不同
正确实现方式
- 用
r控制球体半径:将x、y、z坐标直接乘以r,这样修改r即可直接调整球体大小,无需手动计算缩放倍数 - 强制轴比例一致:添加
ax.set_box_aspect([1,1,1]),确保x、y、z轴采用相同的缩放比例,球体视觉上保持规整 - 合理设置采样点与轴范围:采样点无需过多(30-50足够),轴范围可自动适配或设为
[-r, r]
修正后的代码
import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [8.0, 8.0] plt.rcParams["figure.autolayout"] = True fig = plt.figure() ax = fig.add_subplot(projection='3d') # 设置球体半径为50 r = 50 # 采样点数量,平衡精度与性能 u, v = np.mgrid[0:2 * np.pi:50j, 0:np.pi:30j] # 用r控制坐标缩放,生成半径为50的球体 x = r * np.cos(u) * np.sin(v) y = r * np.sin(u) * np.sin(v) z = r * np.cos(v) ax.plot_surface(x, y, z, cmap=plt.cm.YlGnBu_r) # 强制x、y、z轴同比例,保证球体视觉规整 ax.set_box_aspect([1, 1, 1]) # 可选:手动设置轴范围,与球体半径匹配 ax.set_xlim(-r, r) ax.set_ylim(-r, r) ax.set_zlim(-r, r) plt.show()
内容的提问来源于stack exchange,提问作者oli
相关产品推荐
相关产品推荐

