表面绘图结构化数组错误

3

我一直在尝试用3D图形表示这个结构化数组,希望之后能够进行映射。

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

path = '/users/username/Desktop/untitled folder/python files/MSII_phasespace/'

os.chdir( path )

fig = plt.figure()
ax = fig.gca( projection='3d')


data = np.load('msii_phasespace.npy',mmap_mode='r')

# data.size: 167197
# data.shape: (167197,)
# data.dtype: dtype([('x', '<f4'), ('y', '<f4'), ('z', '<f4'),
  # ('velx', '<f4'), ('vely', '<f4'), ('velz', '<f4'), ('m200', '<f4')])



u = data[:500]
v = data[:500]

xi = u['x']
yi = v['y']


X, Y = np.meshgrid(xi, yi)
Axes3D.plot_surface(X, Y, data)


plt.show()

运行这个代码后,我遇到了以下错误:

未绑定方法 plot_surface() 必须使用 Axes3D 实例作为第一个参数(得到的是 memmap 实例).

我不太确定它在要求什么。由于我是初学者,所以非常感谢任何帮助。另外,包括 z 轴的第三个值是否适用?

我还在#处包含了大小、形状和 dtype。

1个回答

1

plot_surface的调用必须在Axes3D的特定实例上进行,而不是在类上进行。Python实例方法隐式地具有一个第一个self参数,在您调用对象上的方法时传入。

这对您意味着Axes3D.plot_surface(X, Y, data)应该是ax.plot_surface(X, Y, data)ax对象告诉Python在哪个坐标轴集上调用plot_surface()


我明白了,谢谢。不幸的是,尝试这样做会导致错误 ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1。将 Y 重塑为 .Xsize 可以解决这个问题吗?还是最好将这个新发现的错误作为一个完全不同的问题发布? - iron2man
绘制 XYdata[:500] 的图形,而不仅仅是 data,因为它必须与 x 和 y 坐标的大小相同。 - Mad Physicist
太棒了。再次感谢你。 - iron2man
我的错,这就是。 - iron2man

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