Matplotlib图例圆形标记

15

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

这是我的代码:

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

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

如何使图例具有圆形标记?

2个回答

23
如果你只是想在图例中使用圆形标记(而不是严格使用代理艺术家),那么我建议尝试类似于以下的东西:
line1 = Line2D([], [], color="white", marker='o', markerfacecolor="red")
line2 = Line2D([], [], color="white", marker='o', markerfacecolor="green")
line3 = Line2D([], [], color="white", marker='o', markersize=5,  markerfacecolor="slategray")
line4 = Line2D([], [], 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)

这个示例展示了不同颜色和大小的圆,其中绘制的二维线条是白色的(因此使用color="white")。如果您不想填充圆,例如,设置markeredgecolor="green"markerfacecolor="white"

进一步调整

  • 如果您没有白色背景,或者线条与后台网格相交,color="white"仍然会显示线条。使用linewidth=0将完全隐藏线条。
  • 使用plt.legendhandletextpad关键字参数来减少圆圈和标签之间的空间。该值也可以为负,例如handletextpad=-0.3
  • 如果您正在使用seaborn调色板,可以通过索引调色板来设置单个标记面颜色。例如:markerfacecolor=sns.color_palette("cubehelix", 3)[0]

1
谢谢 - 那个方法可行!只是好奇,其他方法为什么不起作用呢? - punkkat
2
这并不是对问题的确切回答,该问题特别询问如何使用代理艺术家(例如matplotlib.patches.Circle)创建图例键,而不考虑标记类型。 - Kambiz
1
不,OP问道:“如何使图例具有圆形标记?”他们最初的方法是使用代理艺术家。正如@pelson在他们的答案中所说,这种解决方案的好处是非常容易修改标记:只需使用表格:https://matplotlib.org/api/markers_api.html - Emiel
有什么想法可以调整这个程序,使得在单个图例线上放置多个半径递增的圆形? - pilu
1
隐藏线条最好使用 linestyle='none'。 要应用相同的标记比例,可以取平方根。np.sqrt(msize) - n1nj4
2
这个解决方案需要:from matplotlib.lines import Line2D - Martin

7

@punkkat 当向传说中添加补丁(Circle 是其中之一)时,添加的是新创建的矩形补丁,而不是原始补丁本身,新创建的补丁具有完全相同的属性(颜色、阴影、透明度等)。因此,无论传入的图形形状如何,结果都将是传说中的正方形补丁。

给定的简单解决方案(由 @cosmosis 给出)是将线实例传递到传说中,该实例支持任意标记,并且由于标记形状没有限制,因此您可以通过传递任意形状来放置在传说中。


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