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

3

我是新手,正在尝试将一个结构化数组、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()至少需要2个参数,但只提供了1个


什么不清楚?散点图始终在两个向量之间。这就是错误信息告诉你的。 - cel
那么这个文件不能制作散点图吗? - iron2man
你确定你理解散点图的概念了吗?你可能想要谷歌一下并查看结果。这是你真正想绘制的吗? - cel
我有被标记为#的信息,其值为(167197,)。 - iron2man
嗯,散点图需要x和y数据。一个(x,y)对创建一个点,所有的对一起构成了散点图。如果你只有一个轴的数据,你不能做一个散点图。这是一个散点图的例子:http://matplotlib.org/examples/shapes_and_collections/scatter_demo.html - Alexander Vogt
很不幸。数据来自千年模拟-II,其中包含模拟中每个暗物质晕的数据,其红移为o。这些数据只适用于绘图和函数制作吗? - iron2man
2个回答

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)

0

你有一个结构化数组。Matplotlib 不知道该怎么处理它。根据matplotlib.pyplot.scatter()的文档, 你需要指定两个输入数组 xy

dtype输出中,我推断出你的结构化数组具有'x''y''z''velx''vely''velz''m200'的值。虽然我不知道它们是什么,但是为了创建散点图,您需要指定两个组件,例如:

plt.scatter(data['x'], data['y'])

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

好的,它起作用了。我会尽力更深入地理解这个。非常感谢你。 - iron2man

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