【问题标题】:offset one of matplotlib's legend items偏移 matplotlib 的图例项之一
【发布时间】:2014-06-19 10:59:08
【问题描述】:

在 python 的 matplotlib 中,对于一篇关于牛顿方法的文章,我想在折线图中可视化前三个迭代和最后一个迭代,其中每个迭代显示为一条单独的曲线。图例标签将类似于“迭代 1”、“迭代 2”、“迭代 3”、“迭代 14”。为了清楚起见,我想在视觉上从最后一个偏移前三个,或者用一些空白,或者最好用一个三点来表示跳跃。有人知道实现这一目标的方法吗?

【问题讨论】:

    标签: python matplotlib legend


    【解决方案1】:

    您可以显示 2 个图例。第一次进行了 3 次迭代,第二次进行了最后一次迭代:

    l1 = plt.legend(data_for, 3_iterations, loc=[1.01,0.6])
    l2 = plt.legend(data_for, last_iteration, loc=[1.01,0.2])
    plt.gca().add_artist(l1) # to add back first legend
    

    loc 允许您选择图例的位置。这里它将在图的右侧,l1 在 l2 上方。您可以修改它以使其尽可能清晰。

    对于三个点,您可以使用 plt.text(x,y,"...") 添加它们,其中 x 和 y 是您想要的坐标 '...'。

    如果您使用代码编辑问题,并提供一个工作示例,我可能会更准确。


    其他解决方案:

    假设leg 是图例对象,您可以移动图例的某些部分。例如,如果您想移动图例的第二行 ([1]):

    L2 = leg.get_lines()[1]
    L2.set_ydata(np.array(L2.get_ydata())-2) # move down of 2 units the line (in the legend based coordinates)
    

    移动相关文本:

    T2 = leg.texts[1]
    T2.set_y(-2)
    

    对于框架:

    frame = leg.get_frame()
    frame.set_height(frame.get_height()+20) 
    

    对于框架,它实际上对我不起作用,我不知道为什么。也许它会为你工作。 或者,您可以使用:

    leg=plt.legend(borderpad=2)
    

    一步一步,你可以设置你的图例。虽然可能很长,我会选择第一个选项,因为您可以移除框架,它不会被注意到。

    希望对你有帮助

    【讨论】:

    • 您好,我想在一个盒子里时转移条目,但这无疑是一个很好的备份解决方案。谢谢!
    • 这看起来像我正在寻找的解决方案类型,但是当我尝试它时,只有行向下移动,而不是文本。边界框也不会放大以包含移位的内容。我对图例对象进行了简要查看,但无法猜测如何解决此问题。
    • 是的,您需要访问图例的其他对象(文本等)。我会编辑
    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多