更改主图例标签文本

75 投票
4 回答
132081 浏览
提问于 2025-04-18 02:32

到目前为止,我已经能够很好地给子图加标签,但我在主图上遇到了问题。

这是我代码中相关的部分:

data_BS_P = data[channels[0]]
data_BS_R = data[channels[1]]
data_BS_Y = data[channels[2]]
plot_BS_P = data_BS_P.plot() #data_BS_P is a pandas dataframe
axBS = plot_BS_P.gca()
axBS.plot(data_BS_R, label='Roll')
axBS.plot(data_BS_Y, label='Yaw')
axBS.set_ylabel('Amplitude (urad)')
axBS.legend(loc='upper center', bbox_to_anchor=(0.5, 1.05), ncol=3,
            fancybox=True, shadow=True)
ml1 = MultipleLocator(10)
ml2 = MultipleLocator(3600)
axBS.yaxis.set_minor_locator(ml1)
axBS.xaxis.set_minor_locator(ml2)
plot_BS_P.save('L1-SUS-BS_M1_DAMP_PRY_INMON.jpg')

这是我现在的结果: 在这里输入图片描述

注意蓝线的标签很长。我想把它改成“Pitch”,而不是文件名。我应该在哪一行进行修改呢?

4 个回答

4

ksindi的回答可以用来设置标签,但正如其他人评论的那样,这样做可能会导致图例的颜色出现问题,特别是在使用seaborn的时候(比如我做的散点图:点和文字就对不上了)。为了解决这个问题,还需要把图例的句柄传给ax.legend。

# the legend has often numbers like '0.450000007', the following snippet turns those in '0.45'
label_list = []
for t in ax.get_legend_handles_labels():
    # the first result will be all handles, i.e. the dots in the legend
    # the second result will be all legend text
    label_list.append(t)

new_list = []
for txt in label_list[1]:
    if txt[0] == '0':
        txt = str(txt)[:4]
    new_list.append(txt)
label_list[1] = new_list

ax.legend(handles=label_list[0], labels=label_list[1])

(我本来想把这个作为评论发的,但我的声望还不够)

7

为了在使用 seaborn 绘图时,避免搞乱图例中的颜色和标记大小,可以参考以下方法:

handles, previous_labels = ax.get_legend_handles_labels()
ax.legend(handles=handles, labels=new_labels)
115

还有一种方法:

ax.legend(labels=mylabels)
102

你需要获取 legend() 对象,并使用 set_text() 来更改文本值,这里有一个简单的例子:

plt.plot(range(10), label='Some very long label')
plt.plot(range(1,11), label='Short label')
L=plt.legend()
L.get_texts()[0].set_text('make it short')
plt.savefig('temp.png')

在这里输入图片描述

在你的情况下,你是在更改图例中的第一个项目,我很确定 L.get_texts()[0] 中的 0 索引也适用于你的问题。

撰写回答