matplotlib 如何在一个3d图上从一个循环绘制多条线

xggvc2p6  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(127)

基本上,我在Python中循环生成光线,并试图将它们绘制在同一个图形上。它们都应该在半径为0的圆上。1.每条射线应该位于圆上的一个位置,该位置变化了arg,在这种情况下,arg是θ。另外,只是提一下(虽然我不认为这是相关的)我在这里做OOP。
我得到了正确的射线,但我不能得到他们在同一个3d图形,我不知道我应该如何做到这一点。我想使用www.example www.example.com ()会给予我一个包含所有24条射线的图,但它只绘制了24条图。以下是相关代码供参考:

r = 0.1
arg = 0
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())
    fig = plt.figure()
    ax = plt.axes(projection='3d')
    #ax = fig.add_subplot(1,2,1,projection='3d')
    #plt.plot(points[:,2],points[:,0])
    ax.plot3D(points[:,0],points[:,1],points[:,2])
plt.show()
j8ag8udp

j8ag8udp1#

扩展Mercury的注解,必须在循环外部创建图形和axes对象。

import matplotlib.pyplot as plt
import numpy as np

r = 0.1
arg = 0

fig = plt.figure()
ax = plt.axes(projection='3d')
for i in range(0,24):
    arg += np.pi/12 * i
    v1 = r*np.sin(arg)
    v2 = r*np.cos(arg)
    # ...
    # using sample data
    x = []
    y = []
    z = []
    for j in range(2):
        x.append(j*v1)
        y.append(j*v2)
        z.append(j)
    # add vertex to the axes object
    ax.plot3D(x, y, z)
plt.show()

相关问题