所以我正在尝试创建一个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()
看起来情节命令出了问题,但我无法确定它。任何帮助表示赞赏。
答案 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()