代码之家  ›  专栏  ›  技术社区  ›  a_guest

更新包含多集合的现有图例

  •  0
  • a_guest  · 技术社区  · 6 年前

    在去之前 PolyCollection 问题是,我已经很好奇是否有一种简洁的方法可以为现有的传说添加新的元素。例如:

    import matplotlib.pyplot as plt
    
    f, ax = plt.subplots()
    ax.legend(handles=ax.plot([0, 1], [0, 1], '-', label='foo'))
    p, = ax.plot([1, 2], [1, 2], '--o', label='bar')
    

    现在我想补充一下 p 到现有的图例 ax.get_legend() . 我发现我能做到(虽然不是真的 更新 ):

    ax.legend(handles=ax.get_legend().legendHandles + [p])
    

    我觉得应该有一个更干净的方式。是吗?

    Example 1

    但当传说中 多藏书 相应的标签丢失:

    ax.legend(handles=[ax.fill_between([0, 1], 0, 1, color='green', label='foo')])
    p = ax.fill_between([1, 2], 0, 1, color='orange', label='bar')
    ax.legend(handles=ax.get_legend().legendHandles + [p])
    

    Example 2

    现在我正在寻找一种方法来检索存储在传说中的标签,但是没有运气, dir(ax.get_legend()) 没有透露任何有用的信息。有趣的是, handle 也不知道它的标签(尽管它在第一个例子中 plot ):

    ax.get_legend().legendHandles[0].get_label()  # Empty string.
    

    所以我想知道图例怎么知道哪个标签对应于这个句柄;它必须存储在图例对象的某个地方。

    我的核心问题是: 如何用新项目更新现有图例,而不丢失任何以前的信息?

    1 回复  |  直到 6 年前
        1
  •  1
  •   ImportanceOfBeingErnest    6 年前

    不更新图例。相反,你只是在你的情节之后创建它。

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    
    p1 = ax.fill_between([0, 1], 0, 1, color='green', label='foo')
    p2 = ax.fill_between([1, 2], 0, 1, color='orange', label='bar')
    
    ax.legend()
    
    plt.show()
    

    如果以后创建了一个情节(例如,通过交互使用或动画),您仍然可以调用 legend 再一次。

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    
    p1 = ax.fill_between([0, 1], 0, 1, color='green', label='foo')
    ax.legend()
    
    p2 = ax.fill_between([1, 2], 0, 1, color='orange', label='bar')
    ax.legend()
    
    plt.show()