组合自定义图例#

逐个组合自定义图例。

注意

有关创建和自定义图例的更多信息,请参阅以下页面

有时你可能不想要一个明确绑定到你所绘制数据的图例。例如,假设你绘制了 10 条线,但不想为每条线显示图例项。如果你只是绘制线并调用 ax.legend(),你将得到以下结果

import matplotlib.pyplot as plt
import numpy as np

import matplotlib as mpl
from matplotlib import cycler

# Fixing random state for reproducibility
np.random.seed(19680801)
N = 10
data = (np.geomspace(1, 10, 100) + np.random.randn(N, 100)).T
cmap = plt.cm.coolwarm
mpl.rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))

fig, ax = plt.subplots()
lines = ax.plot(data)
custom legends

由于数据没有标签,创建图例需要我们定义图标和标签。在这种情况下,我们可以使用不显式绑定到已绘制数据的 Matplotlib 对象来组合图例。例如

from matplotlib.lines import Line2D

custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),
                Line2D([0], [0], color=cmap(.5), lw=4),
                Line2D([0], [0], color=cmap(1.), lw=4)]

fig, ax = plt.subplots()
lines = ax.plot(data)
ax.legend(custom_lines, ['Cold', 'Medium', 'Hot'])
custom legends

还有许多其他 Matplotlib 对象可以以这种方式使用。在下面的代码中,我们列出了几个常见的对象。

from matplotlib.lines import Line2D
from matplotlib.patches import Patch

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

# Create the figure
fig, ax = plt.subplots()
ax.legend(handles=legend_elements, loc='center')

plt.show()
custom legends

脚本总运行时间:(0 分钟 1.615 秒)

由 Sphinx-Gallery 生成的库