繁体   English   中英

如何在 Python 中的一个 3d plot 上循环 plot 多行?

[英]How to plot multiple lines from a loop on one 3d plot in Python?

基本上,我在 Python 中循环生成光线,并尝试在同一张图中将它们全部生成 plot。 它们都应该在半径为 0.1 的圆上。 每条光线都应位于圆上的 position 处,该圆由 arg 改变,在本例中为 theta。 另外,只是提一下(虽然我不认为它是相关的)我在这里做 OOP。

我得到了正确的光线,但我无法在同一张 3d 图表上得到它们,我不确定我应该怎么做。 我以为使用 plt.show() 会给我一个包含所有 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()

扩展 Mercury 的评论,图形和axes object 必须在循环外创建。

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()

示例 3d 图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM