更改主图标图例标签文本

时间:2014-04-12 23:53:49

标签: python matplotlib pandas label legend

到目前为止,我已经能够很好地标记子图,但我遇到了主要问题。

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

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

这就是我到目前为止所做的:enter image description here 注意蓝线的冗长标签。我希望将其标记为“Pitch”而不是文件名。我可以在哪一行?

3 个答案:

答案 0 :(得分:49)

您需要获取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')

enter image description here

在您的情况下,您要更改图例中的第一项,我确信0中的L.get_texts()[0]索引也适用于您的问题。

答案 1 :(得分:48)

另一种方式:

ax.legend(labels=mylabels)

答案 2 :(得分:0)

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

(我会把它发布为评论,但信誉不足)