获取Matplotlib的传奇位置?

时间:2015-02-25 04:52:00

标签: python matplotlib

我想得到matplotlib图例的位置(轴数据或比例的x,y)。我尝试过以下方法:

l = ax.legend(...)
l.get_window_extent()
l.legendPatch.get_bbox().inverse_transformed(ax.transAxes) 

我的目标是使用图例的位置添加一个文本框,旁边有附加信息。

2 个答案:

答案 0 :(得分:2)

获取图例位置的方式取决于图例以及何时访问它。

最好是在绘制绘图后访问图例对象,即在调用之后:

plt.draw()

在之后访问图例对象位置,这将返回稍后可以使用的图像像素。

至少有两种方法可以访问图例位置:

  1. 通过.get_window_extent()方法
  2. 的通用方法
  3. 如果图例有.get_frame().get_bbox().bounds种方法的框架
  4. 显然,如果图例没有框架,那么首选方法是首选的: - )

    您可以同时使用两者来了解如何最好地处理每一个。

    以下是您可以执行此操作的示例:

    import matplotlib.pyplot as plt
    
    x = y = [1,2,3,4,5]
    
    fig, ax = plt.subplots()
    
    ax.plot(x,y)
    leg = ax.legend(['line 1'], loc=6, frameon=False)
    
    plt.draw()
    
    p = leg.get_window_extent()
    
    ax.annotate('Annotation Text', (p.p0[0], p.p1[1]), (p.p0[0], p.p1[1]), 
                xycoords='figure pixels', zorder=9)
    
    plt.show()
    

    这会产生:

    legend annotated

答案 1 :(得分:0)

在此行代码上

leg = ax.legend(['line 1'], loc=6, frameon=False)

使loc=0可使您的绘图保持在与绘图图不重叠或重叠最少的最佳位置。