matplotlib传奇圆圈标记

pun*_*kat 8 geometry matplotlib legend

我正在使用代理艺术家(http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist)制作散点图的传奇,并尝试制作圆形标记.

这是我的代码:

legend([Circle((0,0), fc='g')], ["Green Circle"])
Run Code Online (Sandbox Code Playgroud)

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

如何让图例有圆圈标记?

cos*_*sis 11

如果您要寻找的只是图例中的圆形标记(而不是严格使用代理艺术家),那么我建议您尝试以下方法:

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)
Run Code Online (Sandbox Code Playgroud)

这将显示不同颜色和大小的圆圈,其中绘制的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]

  • 这并不是专门询问如何使用代理艺术家(例如 matplotlib.patches.Circle)来创建图例键(无论标记类型如何)的问题的答案。 (2认同)
  • 该解决方案需要:“from matplotlib.lines import Line2D” (2认同)

pel*_*son 7

@punkkat当添加要添加到图例的补丁(圆形)时,添加的不是补丁本身,而是创建了一个新的矩形补丁,其属性与补丁完全相同(颜色,阴影线,alpha等)。给定的补丁。因此,无论传入的形状如何,结果都将是图例中的方形补丁。

@cosmosis 给出的简单解决方案是将线条实例传递给图例,它可以支持任意标记,并且由于标记的形状没有限制,因此您可以传递的形状也没有限制穿上传奇。