Matplotlib散点图自定义颜色的图例

11

我有点新手,正在尝试创建具有自定义气泡大小和颜色的散点图。图表显示正常,但是我如何获得一个说明颜色代表什么的图例呢?这是我目前的进展:

inc = []
out = []
bal = []
col = []

fig=Figure()
ax=fig.add_subplot(111)

inc = (30000,20000,70000)
out = (80000,30000,40000)
bal = (12000,10000,6000)
col = (1,2,3)
leg = ('proj1','proj2','proj3')

ax.scatter(inc, out, s=bal, c=col)
ax.axis([0, 100000, 0, 100000])

ax.set_xlabel('income', fontsize=20)
ax.set_ylabel('Expenditure', fontsize=20)
ax.set_title('Project FInancial Positions %s' % dt)
ax.grid(True)
canvas=FigureCanvas(fig)
response=HttpResponse(content_type='image/png')
canvas.print_png(response)

这个线程很有帮助,但我无法用它来解决我的问题:Matplotlib:图例显示不正确

1个回答

10

也许这个示例会有所帮助。

通常,图例中的项目与某种绘制对象相关。而scatter函数/方法将所有圆视为单个对象,如下所示:

print type(ax.scatter(...))
因此解决方案是创建多个对象。因此,需要多次调用scatter
遗憾的是,较新版本的matplotlib似乎不会在图例中使用矩形。因此,图例将包含非常大的圆圈,因为您增加了散点图对象的大小。
图例函数使用markerscale关键字参数来控制图例标记的大小,但它似乎已经失效了。
更新: 图例指南建议在类似情况下使用代理艺术家(Proxy Artist)颜色 API说明了有效的fc值。
p1 = Rectangle((0, 0), 1, 1, fc="b")
p2 = Rectangle((0, 0), 1, 1, fc="g")
p3 = Rectangle((0, 0), 1, 1, fc="r")
legend((p1, p2, p3), ('proj1','proj2','proj3'))

要获取先前在图表中使用的颜色,请按以下示例使用:

pl1, = plot(x1, y1, '.', alpha=0.1, label='plot1')
pl2, = plot(x2, y2, '.', alpha=0.1, label='plot2')
p1 = Rectangle((0, 0), 1, 1, fc=pl1.get_color())
p2 = Rectangle((0, 0), 1, 1, fc=pl2.get_color())
legend((p1, p2), (pl1.get_label(), pl2.get_label()), loc='best')

这个示例将生成以下类型的绘图:

使用自定义图例的Matplotlib绘图


好的解决方案,即使由于破损的标记比例尺而无法工作。 - tom10
那个例子非常有帮助。我得去做一段时间的正式工作,但今晚会回来看它。 - PhoebeB

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