在Matplotlib 1.5.1中移动现有图例

时间:2016-02-22 19:48:17

标签: python matplotlib seaborn

我在Matplotlib 1.5.1中尝试了从previous question到无效的答案。

我有一个海盗人物:

g.ax_joint.legend(loc = 'lower right')

这不起作用:

plt.legend(bbox_to_anchor=(1.05, 1), loc=4, borderaxespad=0.)

/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_axes.py:520: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.
  warnings.warn("No labelled objects found. "

以及:

ll = g.ax_joint.get_legend().get_texts()[0]._text
g.ax_joint.get_legend().remove()
g.ax_joint.text( -12, -12, ll,  fontsize=14)

在这种情况下,将现有图例定位到右下方的方法是什么?

现在不是一个优雅的解决方案是:

{{1}}

但是,我认为应该有更好的方法。

1 个答案:

答案 0 :(得分:1)

没有简单的方法(使用像'lower right'这样的字符串)来重新定位我所知道的现有图例。

要获取现有图例的句柄,您可以使用legend.legendHandles()。对于标签,legend.get_texts()会为您提供Text个对象。为了检索实际标签,您最好使用.get_text()而不是私有属性_text

以下内容会将现有图例的句柄和标签复制到新图例。不会复制图例的其他属性。

legend = g.ax_joint.get_legend()
labels = (x.get_text() for x in legend.get_texts())
g.ax_joint.legend(legend.legendHandles, labels, loc='lower right')

我之前建议使用ax.get_legend_handles_labels(),但这会搜索轴而不是图例,在这种情况下无用。