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()
生成一个默认颜色和大小的图,而不是提供的图。
是否有人使用过该功能?
答案 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
参数中传递,并且绘图参数是根据其键指定的。例如,您可以使用字段a
,b
和c
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数据帧添加的,并且比其他对象更好地处理它们。此外,它似乎记录不清,有些不稳定(x
和y
关键字参数使用plot
命令失败,但与scatter
一起正常工作,错误消息是没有帮助)。话虽如此,当您想要绘制的数据有标签时,它会提供一个很好的速记。