2017-09-16 116 views
0

所以我想創建一個3D繪圖和我寫的代碼3D圖是:與numpy的蟒蛇

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

它看上去就像是情節命令錯誤,但我無法確定它。任何幫助表示讚賞。

回答

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實際顯示劇情需要(),但它是可能的,你可能不需要它。

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