Matplotlib:删除行"破折号"并且只显示图例中的文字

时间:2014-05-02 18:40:52

标签: python matplotlib legend

创建一个图例并根据需要格式化文本,但无法弄清楚如何删除“破折号”行以便只显示文本。这是我现在得到的内容(注意该行是如何通过正确对齐的文本):

enter image description here

#Add legend
leg = ax1.legend(bbox_to_anchor=(0.03, 1.05), prop={'size':8})
leg.get_frame().set_alpha(0)
legText = pylab.gca().get_legend().get_texts()

#Format legend text
legText[0].set_color('#5998ff')
legText[1].set_color('#ffbb82')
legText[2].set_color('#d689c4')
for text in legText:
    text.set_ha('right')

1 个答案:

答案 0 :(得分:3)

据我所知,你不能删除短划线(我认为这被称为传奇手柄),但你可以用不可见的东西替换它。例如,常见问题是将图例句柄定义为coloured rectangle

基本思想是直接创建句柄,然后将所有要包含在图例中的项目作为两个列表传递。第一个列表是句柄,第二个列表是标签的文本。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Rectangle

x = np.linspace(0, 1)
p1, = plt.plot(x, np.cos(x))

leg1 = Rectangle((0, 0), 0, 0, alpha=0.0)
plt.legend([leg1], ['label'], handlelength=0)
plt.show()

enter image description here

我怀疑你需要玩这个以获得你想要的精确外观。如果您不需要框架,我可能会建议您在调用frameon=False时使用plt.legend()参数,这样您就不必担心框的对齐情况。