2012-07-10 234 views
4

我正在使用代理艺术家制作散点图的图例(http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist)形状的标记。matplotlib图例圆圈标记

这是我的代码:

legend([Circle((0,0), fc='g')], ["Green Circle"]) 

但是,当我绘制它,传说没有一个圆圈,而是显示一个矩形...

如何获得传说有圆圈标记?

回答

7

如果你正在寻找的是传说中的圆形标记(如严格使用代理艺术家反对),那么我建议想是这样的:

line1 = Line2D(range(1), range(1), color="white", marker='o', markerfacecolor="red") 
line2 = Line2D(range(1), range(1), color="white", marker='o',markerfacecolor="green") 
line3 = Line2D(range(1), range(1), color="white", marker='o',markersize=5, markerfacecolor="slategray") 
line4 = Line2D(range(1), range(1), color="white", marker='o',markersize=10,markerfacecolor="slategray") 
plt.legend((line1,line2,line3,line4),('Thing 1','Thing 2', 'Thing 3', 'Thing 4'),numpoints=1, loc=1) 

这显示不同的颜色和大小的圆圈,其中绘制的2D线是白色的(因此color="white")。例如,如果您不想填写圆圈,请设置markeredgecolor="green"markerfacecolor="white"

进一步调整

  • 如果你没有一个白色的背景,或该线与背景网格相交,color="white"仍会显示线路。 linewidth=0将完全隐藏该行。
  • 使用handletextpad关键字参数为plt.legend来减少圆圈和标签之间的空间。该值也可以是负数,例如handletextpad=-0.3
  • 如果您使用的是seaborn调色板,则可以通过对调色板编制索引来设置各个标记的脸部颜色。例如。 markerfacecolor=sns.color_palette("cubehelix", 3)[0]
+0

谢谢 - 这工作!只是好奇而且想法为什么其他方法不起作用? – punkkat 2012-07-11 01:16:35

+1

对于如何使用代理艺术家(例如matplotlib.patches.Circle)来创建图例键而不考虑标记类型的问题,这并不完全是对问题的回答。 – ktavabi 2017-02-25 07:31:13

+0

不,OP问“我如何让图例有圆形标记?”他们最初的做法是使用代理艺术家。 @pelson在他们的回答中说,这个解决方案的好处是修改标记非常容易:只需使用以下表格即可:https://matplotlib.org/api/markers_api.html – Emiel 2018-02-25 17:19:59

2

@punkkat当添加的补丁(这是圆)被添加到一个图例,它是不被添加了补丁本身,而是一种新的矩形贴剂具有完全相同的属性来创建(颜色,阴影,alpha等)的给定补丁。因此,无论传入的形状如何,结果都将成为图例中的方块。

由@cosmosis提供的简单解决方案是将线条实例传递给图例,该图例可以支持任意的标记,并且由于对标记的形状没有限制,所以对形状没有限制可以通过传说。