Matplotlib自定义颜色散点图图例
我还是个新手,正在尝试创建一个散点图,想要自定义气泡的大小和颜色。图表显示得很好,但我不知道怎么添加一个图例,说明这些颜色代表什么。到目前为止,我已经做到这些:
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
的参数,可以用来控制图例标记的大小,但看起来这个功能有点问题。
更新:
图例指南建议在类似情况下使用代理艺术家。颜色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')
这个例子会生成一个像这样的图: