Python matplotlib:使图例键为方形

Python matplotlib:使图例键为方形,python,matplotlib,Python,Matplotlib,我正在使用matplotlib,并希望在制作条形图时将图例中的关键点更改为正方形而不是矩形。有没有办法具体说明这一点 我现在所拥有的: 我想要的是: 谢谢 您可以定义自己的图例键 答案中的条形图是使用创建的。(我已删除错误条)。说明了如何定义一个类来用椭圆替换图例键。我已经修改了这个类使用正方形(通过使用) 定义了类HandlerSquare,现在可以将其作为ax.legend调用的第三个参数应用于每个图例条目。注意语法: handler_map={rects1[0]: HandlerSqu

我正在使用matplotlib,并希望在制作条形图时将图例中的关键点更改为正方形而不是矩形。有没有办法具体说明这一点

我现在所拥有的:

我想要的是:


谢谢

您可以定义自己的图例键

答案中的条形图是使用创建的。(我已删除错误条)。说明了如何定义一个类来用椭圆替换图例键。我已经修改了这个类使用正方形(通过使用)

定义了
类HandlerSquare
,现在可以将其作为
ax.legend
调用的第三个参数应用于每个图例条目。注意语法:

handler_map={rects1[0]: HandlerSquare(), rects2[0]: HandlerSquare()}
处理程序映射必须是字典

这将为您提供以下绘图:


如果您想要一个非常快速且脏的解决方案来获得近似的正方形(这可能需要一些微调,具体取决于您的绘图),您可以在图例调用中调整
handlelength
kwarg。以下是Schorsch的解决方案(即,一旦您拥有矩形图例艺术家和相应标签的列表):


有关详细信息,请参见。

修改
handlelength
会全局影响图例中其他标记的宽度。因此,该解决方案将与点和线面片的组合不兼容。相反,您可以使用
Line2D
向图例添加一个方形点标记。您只需将其关联行的宽度设置为零:

rect1 = mlines.Line2D([], [], marker="s", markersize=30, linewidth=0, color="r")
rect2 = mlines.Line2D([], [], marker="s", markersize=30, linewidth=0, color="y")
ax.legend((rect1, rect2), ('Men', 'Women'))
ax.legend((rects1[0], rects2[0]), ('Men', 'Women'), handlelength=0.7)
rect1 = mlines.Line2D([], [], marker="s", markersize=30, linewidth=0, color="r")
rect2 = mlines.Line2D([], [], marker="s", markersize=30, linewidth=0, color="y")
ax.legend((rect1, rect2), ('Men', 'Women'))