python - 更改 matplotlib 中图例中的标签格式
问题描述
我想legends
在 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
and handlelength=0
。这里columnspacing
控制图例两列之间的水平间距。将句柄长度设置为 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())
编辑(基于评论)
您可以避免在将图例定义为时使用lines
as的长度手动指定列数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)
推荐阅读
- c# - 将 BSON 流解码为人类可读的字符串
- html - Mailchimp:内部带有条件合并标签块的无序列表?
- f# - F#从两个列表中创建对列表
- reactjs - 如何在 Android 完整证明示例中从网络加载反应原生 JS 包?
- java - 确定哪种类型的异常是可抛出的
- c# - 为什么在 Func 中解构
不起作用,尽管有 Deconstruct 扩展方法? - javascript - 如何使用 async/await 一一进行异步调用?
- python - 如何优化 for 循环以使用 2-D 数组中的值填充 3-D np 数组?
- rust - 展平大数组常量会减少 L1 缓存未命中的数量吗?
- tailwind-css - 你能把 Tailwind 和 vanilla CSS 混合起来吗?