为什么无法在传奇附近做注释?

时间:2015-12-30 06:34:03

标签: python matplotlib legend

我正在尝试将文字添加到与图例相邻的位置。这是我尝试过的:

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()

这正是Get Matplotlib legend location?中stackoverflow问题中包含的脚本。当我运行完全相同的脚本时,我会产生不同的结果。当我运行这个脚本时,字符串" Annotation Text"出现在图的左下角。

对于记录,运行此脚本时p的值为Bbox(x0=0.0, y0=0.0, x1=1.0, y1=1.0)

如何获得图例的坐标,最好是轴坐标,即。 ax.transAxes?

我正在使用matplotlib 1.5.0和python 2.7

1 个答案:

答案 0 :(得分:1)

您可以使用inverse_transformed将图像像素转换为轴分数:

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)

fig.canvas.draw()

p = leg.get_window_extent().inverse_transformed(ax.transAxes)

ax.annotate('Annotation Text', (p.p0[0], p.p1[1]), xycoords='axes fraction')

这将产生这样的情节:

enter image description here

我也使用matplotlib 1.5.0和python 2.7,无论脚本执行多少次,我都会得到相同的图。