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

如何在单个3D图中绘制循环生成的多条光线

解决Matplotlib循环绘制多光线生成多张图的问题

你当前代码每次循环都会创建新的画布(plt.figure())和3D轴(plt.axes(projection='3d')),所以每条光线都被画在独立的图里。要把所有光线放在同一张图里,只需要把创建画布和轴的代码移到循环外面,循环内只执行绘制操作即可。

修改后的完整代码:

import numpy as np
import matplotlib.pyplot as plt
# 假设你的ray模块已正确导入
import ray

r = 0.1
arg = 0

# 先创建一次画布和3D轴,放在循环外面
fig = plt.figure()
ax = plt.axes(projection='3d')

for i in range(0,24):
    arg += np.pi/12
    x = r*np.sin(arg)
    y = r*np.cos(arg)
    l = ray.Ray(r=np.array([x,y,0]),v=np.array([0.5,0,5]))
    c = ray.SphericalRefraction(z0 = 100, curv = 0.0009, n1 = 1.0, n2 = 1.5, ar = 5)
    c.propagate_ray(l)
    o = ray.OutputPlane(250)
    o.outputintercept(l)
    points = np.array(l.vertices())
    # 直接在已创建的ax上绘制当前光线
    ax.plot3D(points[:,0],points[:,1],points[:,2])

# 最后统一显示图
plt.show()

关键改动说明:

  • 将fig = plt.figure()和ax = plt.axes(projection='3d')移到for循环之前,确保整个循环共用同一个画布和3D坐标轴
  • 循环内仅保留ax.plot3D(...)的绘制逻辑,每条光线都会叠加到同一个轴上
  • 把plt.show()放在循环结束后,一次性显示包含所有光线的图

内容的提问来源于stack exchange,提问作者hinkog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:25:21