我是新手,我正在尝试将结构化数组,npy文件表示为散点图。我不完全确定我的另一个论点应该是什么。我认为我应该跨越x
和y
的价值观,但我不确定。
import matplotlib.pyplot as plt
import numpy as np
import os
path = '/users/username/Desktop/untitled folder/python files/MSII_phasespace/'
os.chdir( path )
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')])
plt.title ("MS II data structure")
plt.xlabel(r'$\Omega_{\mu \nu}$')
plt.ylabel(r'$\Omega^{\mu \nu}$')
plt.scatter(data)
plt.show()
输入此输出错误:
TypeError: scatter() takes at least 2 arguments (1 given)
答案 0 :(得分:1)
plt.scatter
至少需要两个参数(错误说得非常清楚)。
如果你查看文档(http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter),你会看到这个签名:
scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
因此,您需要为每个x
和y
值提供至少一个数组:
plt.scatter(data['x'], data['y'])
从matplotlib 1.5开始,您也可以使用此语法 从结构化数组中访问数据:
plt.scatter('x', 'y', data=data)
答案 1 :(得分:0)
那里有structured array。 Matplotlib不知道如何处理它。正如documentation for matplotlib.pyplot.scatter()
中所述,您需要指定两个输入数组y
和dtype
。
从'x'
输出中,我收集结构化数组的值为'y'
,'z'
,'velx'
,'vely'
,'velz'
,'m200'
和plt.scatter(data['x'], data['y'])
。我不知道它们是什么,但为了创建一个散点图,你需要指定两个组件,例如:
'm200'
假设plt.scatter(data['x'], data['y'], s=data['m200'])
应映射到散点的宽度,您可以使用:
{{1}}