You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何添加绕X轴旋转的旋转体(Solid of Revolution)子图并为各子图添加图例

如何添加绕X轴旋转的旋转体(Solid of Revolution)子图并为各子图添加图例

嘿,我来帮你搞定这个需求!咱们一步步修改你的代码,既添加绕X轴旋转的立体子图,又给每个子图配上清晰的图例,最终得到三个排列整齐的子图。

关键修改点说明

  • 调整子图布局:把原来的1行2列改成1行3列,对应XY平面图、绕Y轴旋转体、绕X轴旋转体三个子图
  • 计算绕X轴的旋转体:绕X轴旋转时,需要把Y轴方向的曲线以X轴为中心做圆周旋转,生成对应的三维坐标
  • 添加图例:给每个绘图命令加上label参数,再通过legend()方法把图例放在子图上方(避免遮挡图形)

修改后的完整代码

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

n = 100
fig = plt.figure(figsize=(18, 6))  # 加宽画布,适配三个子图

# 1. XY平面的原始曲线子图
ax1 = fig.add_subplot(131)
y = np.linspace(np.pi/8, np.pi*40/5, n)
x = (y-2)**(1/3)  # 目标函数 x=(y-2)^(1/3)
# 绘图时添加label,用于图例
ax1.plot(x, y, label=r'$x=(y-2)^{1/3}$')
# 把图例放在子图上方居中位置
ax1.legend(bbox_to_anchor=(0.5, 1.15), loc='center', borderaxespad=0)
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax1.set_title('XY平面曲线')

# 2. 绕Y轴旋转的立体子图
ax2 = fig.add_subplot(132, projection='3d')
t = np.linspace(0, np.pi*2, n)
# 绕Y轴旋转:X-Z平面的圆周运动,Y值保持不变
xn = np.outer(x, np.cos(t))
zn = np.outer(x, np.sin(t))
yn = np.zeros_like(xn)
for i in range(len(x)):
    yn[i:i+1, :] = np.full_like(yn[0, :], y[i])
# 绘制曲面并添加label
ax2.plot_surface(xn, yn, zn, label='绕Y轴旋转体', alpha=0.7)
# 3D图的图例位置调整
ax2.legend(bbox_to_anchor=(0.5, 1.15), loc='center', borderaxespad=0)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('绕Y轴旋转的立体')

# 3. 绕X轴旋转的立体子图
ax3 = fig.add_subplot(133, projection='3d')
# 绕X轴旋转:Y-Z平面的圆周运动,X值保持不变
yn_rot = np.outer(y, np.cos(t))
zn_rot = np.outer(y, np.sin(t))
xn_rot = np.zeros_like(yn_rot)
for i in range(len(x)):
    xn_rot[i:i+1, :] = np.full_like(xn_rot[0, :], x[i])
# 绘制曲面并添加label
ax3.plot_surface(xn_rot, yn_rot, zn_rot, label='绕X轴旋转体', alpha=0.7, color='orange')
# 添加图例
ax3.legend(bbox_to_anchor=(0.5, 1.15), loc='center', borderaxespad=0)
ax3.set_xlabel('X')
ax3.set_ylabel('Y')
ax3.set_zlabel('Z')
ax3.set_title('绕X轴旋转的立体')

# 调整子图间距,避免重叠
plt.tight_layout()
plt.show()

细节解释

  1. 画布尺寸调整:把figsize从(12,6)改成(18,6),给三个子图足够的展示空间
  2. 图例位置:用bbox_to_anchor=(0.5, 1.15)把图例定位在子图上方居中,不会遮挡曲线或立体图形
  3. 绕X轴旋转的计算逻辑:固定X坐标,让每个Y值绕X轴做圆周运动,生成对应的Y和Z坐标矩阵,这样就能得到绕X轴旋转的立体曲面
  4. 视觉区分:给绕X轴的立体曲面设置了橙色(color='orange'),和绕Y轴的曲面做颜色区分,更易分辨

备注:内容来源于stack exchange,提问作者Freya the Goddess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:47:43