Matplotlib,带有一个标签的多个不同标记的图例

时间:2012-02-13 14:38:18

标签: python matplotlib

以下是情况的简化情节:

plot example

我希望能够为一组不同的标记设置一个标签,而不是让每个数据点标记都有一个单独的标记。我希望能够有一个像:

这样的传奇
<triangle> <square> <hexagon> <diamond> <circle> Shotcrete strength data points
<green line> 10 minute strength
<blue line> 60 minute strength
<yellow line> 1 day strength
<orange line> 7 day strength
<red line> 28 day strength

我想这样做,因为在最终的情节中,我将有三组数据点,并显示18(3组* 6点/组)标记/标签组合将是凌乱的。

我正在使用Matplotlib和Python 2.7。

1 个答案:

答案 0 :(得分:3)

注意:这个答案可以作为正确答案的指南 - 但它并没有解决上述问题。有关Patch集合在matplotlib中不受支持的问题,请参阅下面的编辑。


如果您想要完全自定义,可以使用所谓的代理艺术家:

from pylab import *

p1 = Rectangle((0, 0), 1, 1, fc="r")
p2 = Circle((0, 0), fc="b")
p3 = plot([10,20],'g--')
legend([p1,p2,p3], ["Red Rectangle","Blue Circle","Green-dash"])

show()

在这里,您可以指定完全您想要的图例,甚至使用非标准的绘图形状(补丁)。

修改:此方法存在一些问题,matplotlib only supports these Artists in a legend没有调整。对于matplotlib v1.0及更早版本,支持的艺术家如下。

Line2D
Patch
LineCollection
RegularPolyCollection
CircleCollection

您对多个散点图的请求将使用Patch Collection完成,上面不支持。理论上与v1.1,这是可能的,但我不知道如何。