仅使用3个列表/数组,使用matplotlib绘制多条线

仅使用3个列表/数组,使用matplotlib绘制多条线,matplotlib,lines,Matplotlib,Lines,我想在matplotlib中以3D方式绘制10行,但不必使用ax.plot(x,y,z)10次。 这是我用b/c编写的荒谬代码,我无法想象zip和数组是如何协同工作的 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = np.arra

我想在matplotlib中以3D方式绘制10行,但不必使用ax.plot(x,y,z)10次。 这是我用b/c编写的荒谬代码,我无法想象zip和数组是如何协同工作的

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = np.array([0.,3.])
y = np.array([0.,0.])
z = np.array([0.,0.])

u = np.array([0.,3.])
v = np.array([.5,.5])
w = np.array([0.,0.])

a = np.array([0.,3.])
b = np.array([1.,1.])
c = np.array([0.,0.])

e = np.array([0.,3.])
d = np.array([1.5,1.5])
f = np.array([0.,0.])

r = np.array([0.,3.])
s = np.array([2.,2.])
t = np.array([0.,0.])

ax.set_xlabel("x axis")
ax.set_ylabel("y axis")
ax.set_zlabel("z axis")


ax.plot(x,y,z)
ax.plot(a,b,c)
ax.plot(r,s,t)
ax.plot(u,v,w)
ax.plot(e,d,f)


plt.show()
我猜我会使用拉链和/或for循环。
谢谢,这是图。

您可以将所有数据点存储在一个大型数据阵列中。通过这种方式,您可以在阵列上循环并执行以下操作:

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# initialize array with size number of lines
data = np.full((2,3), None) 

# fill data array with data points [x,y,z]
data[0] = [[0,3],[0,0],[0,0]]
data[1] = [[0,3],[0.5,0.5],[0,0]]
# etc...

# loop over data array and plot lines
for line in data:
    ax.plot(line[0],line[1],line[2])

plt.show()
关于如何存储数据,有多种不同的方法,您也可以跳过初始化步骤,只需一次性创建阵列:

data = np.array([[[0,3],[0,0],[0,0]],
                 [[0,3],[0.5,0.5],[0,0]],
                 [[0,3],[0.5,0.5],[0,0]],
                 [...] ])
或者使用numpy函数向数据数组添加新行