matplotlib散点图:如何使用data=参数

matplotlib散点图:如何使用data=参数,matplotlib,scatter-plot,Matplotlib,Scatter Plot,scatter()的matplotlib文档说明: 除上述参数外,此函数还可以采用data关键字参数。如果给出了此类数据参数,则以下参数将替换为数据[]: 具有以下名称的所有参数:“s”、“颜色”、“y”、“c”、“线宽”、“facecolor”、“facecolor”、“x”、“edgecolors” 然而,我不知道如何让它发挥作用。 最小的例子 import matplotlib.pyplot as plt import numpy as np data = np.random.rando

scatter()
的matplotlib文档说明:

除上述参数外,此函数还可以采用data关键字参数。如果给出了此类数据参数,则以下参数将替换为数据[]:

具有以下名称的所有参数:“s”、“颜色”、“y”、“c”、“线宽”、“facecolor”、“facecolor”、“x”、“edgecolors”

然而,我不知道如何让它发挥作用。 最小的例子

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random(size=(3, 2))
props = {'c': ['r', 'g', 'b'],
         's': [50, 100, 20],
         'edgecolor': ['b', 'g', 'r']}

plt.scatter(data[:, 0], data[:, 1], data=props)
plt.show()
生成具有默认颜色和大小的打印,而不是提供的打印


有人使用过该功能吗?

参考您的示例,我认为以下内容符合您的要求:

plt.scatter(data[:, 0], data[:, 1], **props)
文档中的这一点让我感到困惑,看看源代码,
axes/\u axes.py中的
scatter
似乎与此
数据
参数无关。剩余的
kwargs
最终成为
PathCollection
的参数,可能是有bug

您还可以使用PathCollection中的各种
set
方法在
scatter
之后设置这些参数,例如:

pc = plt.scatter(data[:, 0], data[:, 1])
pc.set_sizes([500,100,200])

这似乎是大约两年前添加的一个被忽略的功能。发行说明中有一个简短的示例( ).除了这个问题和一篇简短的博文(),我只能找到这些

基本上,任何类似dict的对象(“文档称之为标签数据”)都在
data
参数中传递,并且根据其键指定绘图参数。例如,您可以使用字段
a
b
c
创建结构化数组

coords = np.random.randn(250, 3).view(dtype=[('a', float), ('b', float), ('c', float)])
您通常会使用

pyplot.plot(coords['a'], coords['b'], 'x')
但是使用数据参数,它可以用

pyplot.plot('a', 'b','x', data=coords)
标签
b
可能与将行设置为蓝色的样式字符串混淆,但第三个参数消除了这种歧义。它也不限于x和y数据

pyplot.scatter(x='a', y='b', c='c', data=coords)
将基于列“c”设置点颜色


看起来此功能是为熊猫数据帧添加的,并且比其他对象处理得更好。此外,它的文档记录似乎很差,而且有些不稳定(使用
x
y
关键字参数在
plot
命令中失败,但在
scatter
中工作正常,错误消息没有帮助)。话虽如此,当您想要绘制的数据有标签时,它提供了一个很好的速记。

谢谢您的回答。显然,我可以直接将数组作为参数传递给函数。我正在编写一些大型代码,其中使用data=参数可以大大简化我的代码,这就是我好奇的原因。我还检查了
scatter()
中的代码,并将
数据的使用追溯到类
Artist
中的一个函数
update
,但即使这样,我也无法理解它的作用。使用
**props
与我们期望的
data=props
不一样简单吗?我想你只是不想每次都拼出每个关键词。谢谢你的回答。一年后,我想我基本上已经放弃了这种语法,我不能说我已经错过了很多。但是在任何情况下,我完全误解了关于这一点的文档,现在用你的例子来说确实有意义。