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

时间:2016-10-07 14:03:12

标签: matplotlib scatter-plot

scatter()状态的matplotlib文档:

  

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

     

所有具有以下名称的参数:'s','color','y','c','linewidths','facecolor','facecolors','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()

生成一个默认颜色和大小的图,而不是提供的图。

是否有人使用过该功能?

2 个答案:

答案 0 :(得分:0)

参考你的例子,我认为以下是你想要的:

plt.scatter(data[:, 0], data[:, 1], **props)

文档中的这一点让我感到困惑,并且查看来源scatter中的axes/_axes.py似乎对此data参数无效。剩余的kwargs最终作为PathCollection的参数,可能存在错误。

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

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

答案 1 :(得分:0)

这似乎是两年前增加的一个被忽视的特征。发行说明有一个简短的例子( https://matplotlib.org/users/prev_whats_new/whats_new_1.5.html#working-with-labeled-data-like-pandas-dataframes)。除了这个问题和一篇简短的博客文章(https://tomaugspurger.github.io/modern-6-visualization.html),这些都是我能找到的。

基本上,任何类似dict的对象("标记数据"文档称之为)都会在data参数中传递,并且绘图参数是根据其键指定的。例如,您可以使用字段abc

创建结构化数组
coords = np.random.randn(250, 3).view(dtype=[('a', float), ('b', float), ('c', float)])

您通常会使用

创建a vs b的图表
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'设置点颜色。

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