Scatter()至少需要2个参数(给定1个)

时间:2015-11-29 20:07:08

标签: python numpy matplotlib plot scatter

我是新手,我正在尝试将结构化数组,npy文件表示为散点图。我不完全确定我的另一个论点应该是什么。我认为我应该跨越xy的价值观,但我不确定。

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)

2 个答案:

答案 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)

因此,您需要为每个xy值提供至少一个数组:

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()中所述,您需要指定两个输入数组ydtype

'x'输出中,我收集结构化数组的值为'y''z''velx''vely''velz''m200'plt.scatter(data['x'], data['y']) 。我不知道它们是什么,但为了创建一个散点图,你需要指定两个组件,例如:

'm200'

假设plt.scatter(data['x'], data['y'], s=data['m200']) 应映射到散点的宽度,您可以使用:

{{1}}