Matplotlib箭头的传奇

时间:2014-03-12 10:14:53

标签: python matplotlib

我想知道如何标记arrow并将其显示在情节的图例中。

例如,如果我这样做

 arrow(0,1,'dummy',label='My label')

 legend()

我没有在传奇中看到任何内容。我想在图例框中看到标签旁边的箭头。

2 个答案:

答案 0 :(得分:7)

您可以向图例命令添加任意艺术家,如here

所述
import matplotlib.pyplot as plt

f = plt.figure()
arrow = plt.arrow(0, 0, 0.5, 0.6, 'dummy',label='My label')
plt.legend([arrow,], ['My label',])

箭头艺术家不允许使用标记参数,因此您需要进行一些额外的手动修补以替换图例中的标记。

修改

要获取自定义标记,您需要定义自己的handler_map。以下代码的灵感来自示例here

from matplotlib.legend_handler import HandlerPatch
import matplotlib.patches as mpatches

def make_legend_arrow(legend, orig_handle,
                      xdescent, ydescent,
                      width, height, fontsize):
    p = mpatches.FancyArrow(0, 0.5*height, width, 0, length_includes_head=True, head_width=0.75*height )
    return p

f = plt.figure(figsize=(10,6))
arrow = plt.arrow(0,0, 0.5, 0.6, 'dummy', label='My label', )
plt.legend([arrow], ['My label'], handler_map={mpatches.FancyArrow : HandlerPatch(patch_func=make_legend_arrow),
                    })

答案 1 :(得分:4)

您可以添加任何乳胶符号作为标记。 例如:对于指向下方的箭头,您可以指定:

scatter( x ,y, c='purple',marker=r’$\downarrow$’,s=20, label='arrow' )