matplotlib 如何添加自定义图例沿着默认图例

idv4meu8  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(147)

我绘制了一些已定义标签的线

plt.axvline(..., label='some text')
plt.legend()

但是,我想添加一些自定义传说以外的,我们有。我知道如何使用from matplotlib.patches import Patch作为色块或from matplotlib.lines import Line2D作为线条,代码如下

legend_elements = [Line2D([0], [0], color='b', lw=4, label='Line'),
                   Line2D([0], [0], marker='o', color='w', label='Scatter',
                          markerfacecolor='g', markersize=15),
                   Patch(facecolor='orange', edgecolor='r',
                         label='Color Patch')]

plt.legend(handles=legend_elements)

但问题是,较新的plt.legend()函数会覆盖默认绘制的旧图例。我想有两个,默认的一个,沿着我的自定义定义图例。
我正在寻找网站,可以指导我在这一点,但我可以找到大部分关于如何添加自定义图例,但没有添加它沿着默认图例。

w3nuxt5m

w3nuxt5m1#

下面是一个例子,你可以得到旧的图例,然后将它与你的图例结合起来:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
from matplotlib.lines import Line2D

t = np.linspace(-10, 10, 100)
sig1 = np.cos(t)
sig2 = np.sin(t)

fig, ax = plt.subplots()
ax.plot(t, sig1, label='Sig 1')
ax.plot(t, sig2, label='Sig 2')
plt.legend()

old_handles, labels = ax.get_legend_handles_labels()

legend_elements = [Line2D([0], [0], color='b', lw=4, label='Line'),
                   Line2D([0], [0], marker='o', color='w', label='Scatter',
                          markerfacecolor='g', markersize=15),
                   Patch(facecolor='orange', edgecolor='r',
                         label='Color Patch')]

plt.legend(handles=old_handles + legend_elements)

相关问题