Python 更改matplotlib中图例内标签的格式

Python 更改matplotlib中图例内标签的格式,python,matplotlib,Python,Matplotlib,我想自定义matplotlib中的图例 我想在图例中水平排列标签,并移除手柄。标签的颜色必须与线条颜色相同 目前我已将句柄设置为不可见,但无法更改标签的顺序 期待专家的建议 预期输出: 到目前为止,我取得的成就如下: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 20, 1000) y1 = np.sin(x) y2 = np.cos(x) plt.figure(figsize=(10,7)) li

我想自定义matplotlib中的
图例

我想在图例中水平排列标签,并移除手柄。标签的颜色必须与线条颜色相同

目前我已将句柄设置为不可见,但无法更改标签的顺序

期待专家的建议

预期输出:

到目前为止,我取得的成就如下:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(figsize=(10,7))
lines=[]
lines.append(plt.plot(x, y1, '-b', label='sine')[0])
lines.append(plt.plot(x, y2, '-r', label='cosine')[0])
plt.legend(loc='upper left')
plt.ylim(-1.5, 2.0)
for item_legend,handle,line in zip(plt.legend().get_texts(),plt.gca().get_legend().legendHandles,lines):
    plt.setp(item_legend, color=line.get_color(),size=30)
    handle.set_visible(False)

plt.show()
输出:

编辑: 如果我设定

plt.legend(loc='upper left', ncols=2)

标签在一行中对齐,但删除所有以前的格式

这就是你可以做到的。此处左对齐的关键是使用
handletextpad=0
handlelength=0
。此处的
列间距
控制图例两列之间的水平间距。将句柄长度设置为0只会显示图例文本。最后,您可以根据相应的曲线调整图例文本的颜色

l = plt.legend(loc='upper left', ncol=2, handlelength=0, handletextpad=0, columnspacing=0.5, fontsize=36)

handles = plt.gca().get_legend().legendHandles

for i, text in enumerate(l.get_texts()):
    text.set_color(lines[i].get_color())    
编辑(基于评论)

在将图例定义为时,可以使用
行的长度
作为
ncol
来避免手动指定列数

l = plt.legend(loc='upper left',ncol=len(lines), handlelength=-0.2, columnspacing=-0.2, fontsize=36)
您还可以通过将透明度参数
alpha
设置为0来移除/隐藏控制柄

handles[i].set_alpha(0)
或者把它藏起来当作

handles[i].set_visible(False)

谢谢@Bazingaa。1.我们可以从图例的某些参数中指定n_cols值吗。2.有没有更好的方法来移除把手,而不是让它看不见-我猜这就是左对齐问题的原因。我真的很难说出来。透明度=0也类似于设置_visible为false。我们是否可以设置为“无”或“其他”以便左对齐正常工作。@AI\U Learning:我知道了。检查我的新编辑和相应的图形此处向左对齐的键是
handleextpad=0
handlelength=0