与numpy python的3D情节

时间:2017-09-16 16:50:24

标签: python numpy 3d

所以我正在尝试创建一个3D图,我写的代码是:

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
a=[1,5,10]
x=list(range(1,10))
y=list(range(1,10))
z=list(range(1,10))
for i in np.arange(1,9,1):
    r1=a[2]*y[i]-a[1]*z[i]
    r2=a[0]*z[i]-a[2]*x[i]
    r3=a[1]*x[i]-a[0]*y[i]
    ax.plot(r1,r2,r3)

为此我收到错误:

TypeError                                 Traceback (most recent call 
last)
<ipython-input-95-dd97076f2b6e> in <module>()
    14     r2=a[0]*z[i]-a[2]*x[i]
    15     r3=a[1]*x[i]-a[0]*y[i]
---> 16     ax.plot(r1,r2,r3)

   1537         # Match length
   1538         if not cbook.iterable(zs):
-> 1539             zs = np.ones(len(xs)) * zs
   1540 
   1541         lines = Axes.plot(self, xs, ys, *args[argsi:], 
**kwargs)

TypeError: object of type 'int' has no len()

看起来情节命令出了问题,但我无法确定它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

代码中似乎有一些错误:

在我的情况下,我设法用:

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

fig = plt.figure()
ax = fig.gca(projection='3d')
a=[1,5,10]
x=np.array(range(1,10))
y=np.array(range(1,10))
z=np.array(range(1,10))


r1=a[2]*y-a[1]*z
r2=a[0]*z-a[2]*x
r3=a[1]*x-a[0]*y

ax.plot(r1,r2,r3)
plt.show()

我更改了导入,以便您实际导入pyplot作为plt(您在plt.figure()中的原始代码中使用)

然后我没有使用x,y和z的列表,而是使用了颠簸的数组,这些数组允许你将它们添加和相乘,如下所示:

r1=a[2]*y-a[1]*z

最后我添加了plt.show(),这在我的IDE中需要实际显示情节,但你可能不需要它。

答案 1 :(得分:0)

我使用以下代码:

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

def crossprod(val):
    return [(a[2]-a[1])*val,(a[0]-a[2])*val,(a[1]-a[0])*val]

mpl.rcParams['legend.fontsize'] = 10
fig = plt.figure()
ax = fig.gca(projection='3d')
a=[1,0,0]
array=[]
for i in np.arange(-50,50):
    cr=crossprod(i)
    array.append(cr)
Array=np.vstack(array)
x=Array[:,[0]].ravel()
y=Array[:,[1]].ravel()
z=Array[:,[2]].ravel()
ax.plot(x,y,z, label='a=%s' %a)
ax.legend()
plt.show()