类型错误:Axes3D

4
我在使用Axes3D绘图时遇到了问题,每次我输入一些内容时,都会出现“TypeError: unbound method scatter() must be called with Axes3D instance as first argument (got list instance instead)”错误。
我不太明白它需要我提供什么类型的数据,因为我只想输入一个点的x、y、z坐标。(这些可以是列表或整数,但都会出错。)
Axes3D.scatter( Xc[l], Yc[l], Zc[l], c=(i/nbodies,i/nbodies,i/nbodies))

我真的不知道这里的问题是什么

2个回答

10

首先需要实例化轴:

ax = Axes3D(plt.gcf())
ax.scatter( Xc[l], Yc[l], Zc[l], c=(i/nbodies,i/nbodies,i/nbodies))

或者,您可以使用

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter( Xc[l], Yc[l], Zc[l], c=(i/nbodies,i/nbodies,i/nbodies))

成功了!不过你有没有设置Z轴的技巧?我好像无法将它设置为400。 - Coolcrab
“设置z轴”是什么意思?您想调整它的限制吗? - David Zwicker
哦,没问题,我只是想问一些额外的东西:P 是的,我的意思是限制,因为ax.axis([-400, 400, -400, 400])不接受第三个参数。 - Coolcrab
只需使用 ax.set_zlim(-400, 400) - David Zwicker

1

David的回答实际上对我没有用,但我通常使用的方法看起来是这样的:您可以通过创建新的子图来创建轴对象,如David所述:

fig = figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(1,2,3)

scatter()是必须在对象上调用的方法。这样做时,传递给该方法的第一个参数始终是对象本身。这就是为什么在调用它时,如果在类Axes3D上调用,那么缺少对象和正确的第一个参数。

更新:好的,我没有看到David答案中的更新,所以现在当然是一样的;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接