去除图例中的“破折号”,仅显示文本

1 投票
1 回答
4151 浏览
提问于 2025-04-18 05:10

我创建了一个图例,并根据需要格式化了文本,但我不知道怎么去掉那些“虚线”,这样就只显示文本了。现在的效果是这样的(注意看,右对齐的文本上面有一条线穿过):

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 个回答

5

据我所知,你不能去掉那些破折号(我想这被称为图例句柄),但你可以用一些看不见的东西来替代它。例如,一个常见的问题是把图例句柄定义为一个有颜色的矩形

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

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

我觉得你可能需要多试试,才能得到你想要的效果。如果你不需要框架的话,我建议在调用plt.legend()时使用frameon=False这个参数,这样你就不用担心和框的对齐问题了。

撰写回答