Matplotlib 简明教程
Matplotlib - Legends
一般情况下,图形中的 legend 提供沿 Y 轴描述数据的可视化表示,通常称为图形系列。它是一个包含图形中每个系列的符号和标签的框。系列可以是折线图中的线、条形图中的条等。当同一绘图上有多个数据系列时,图例很有用,而且您要区分它们。在下图中,我们可以观察绘图中的图例(用红色矩形突出显示)−
Adding legend to a matplotlib plot
要向 Matplotlib 绘图添加图例,您通常使用 matplotlib.pyplot.legend() 函数。此函数用于将图例添加到 Axes,为绘图中的元素提供可视化指南。
Syntax
以下是此函数的语法
matplotlib.pyplot.legend(*args, **kwargs)
此函数可以通过不同的方式调用,具体取决于您希望如何自定义图例。
在调用 legend() 时不传递任何额外参数,Matplotlib 会自动确定要添加到图例的元素。这些元素的标签取自绘图中的艺术家。您可以在创建艺术家时或使用 set_label() 方法指定这些标签。
Example 1
在这个示例中,图例提取创建绘图时使用的标签参数中的数据。
import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3]
y = [2, 4, 6]
# Plotting the data with labels
line, = plt.plot(x, y, label='Legend describing a single line')
# Adding a legend
plt.legend()
# Show the plot
plt.show()
print('Successfully Placed a legend on the Axes...')
Successfully Placed a legend on the Axes...
Example 2
以下是在艺术家上使用 set_label() 方法的另一种方法。
import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3]
y = [2, 4, 6]
# Plotting the data with labels
line, = plt.plot(x, y)
line.set_label('Place a legend via method')
# Adding a legend
plt.legend()
# Show the plot
plt.show()
print('Successfully Placed a legend on the Axes...')
Successfully Placed a legend on the Axes...
Manually adding the legend
您可以传递一个图例艺术家的 iterable,后跟一个图例标签的 iterable,以明确控制哪些艺术家具有图例条目。
Example 1
以下是通过列出艺术家和标签调用 legend() 函数的示例。
import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3]
y1 = [2, 4, 6]
y2 = [1, 3, 5]
y3 = [3, 6, 9]
# Plotting the data
line1, = plt.plot(x, y1)
line2, = plt.plot(x, y2)
line3, = plt.plot(x, y3)
# calling legend with explicitly listed artists and labels
plt.legend([line1, line2, line3], ['Label 1', 'Label 2', 'Label 3'])
# Show the plot
plt.show()
print('Successfully Placed a legend on the Axes...')
Successfully Placed a legend on the Axes...
Example 2
以下是仅通过列出艺术家调用 legend() 函数的示例。这种方法与前一种方法类似,但在这种情况下,标签取自艺术家的标签属性。
import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3]
y1 = [2, 4, 6]
y2 = [1, 3, 5]
# Plotting the data with labels
line1, = plt.plot(x, y1, label='Label 1')
line2, = plt.plot(x, y2, label='Label 2')
# Adding a legend with explicitly listed artists
plt.legend(handles=[line1, line2])
# Show the plot
plt.show()
print('Successfully Placed a legend on the Axes...')
Successfully Placed a legend on the Axes...
Example 3
在这个示例中,我们首先绘制两组数据,然后我们通过调用 legend() 函数来添加一个图例,其中包含一个表示图例项的字符串列表。
import matplotlib.pyplot as plt
# Example data
x = [1, 2, 3, 4, 5, 6]
y1 = [1, 4, 2, 6, 8, 5]
y2 = [1, 5, 3, 7, 9, 6]
# Plotting the data
plt.plot(x, y1)
plt.plot(x, y2)
# Adding a legend for existing plot elements
plt.legend(['First line', 'Second line'], loc='center')
# Show the plot
plt.show()
print('Successfully Placed a legend on the Axes...')
Successfully Placed a legend on the Axes...
Adding legend in subplots
要在每个子图中添加图例,可以在图形的每个轴对象上使用 legend() 函数。
Example 1
以下是一个在 matplotlib 图形的每个子图中添加图例的示例。此方法在轴对象上使用 legend() 函数。
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7, 3.50]
plt.rcParams["figure.autolayout"] = True
# Sample data
x = np.linspace(-2, 2, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# Create the figure with subplots
f, axes = plt.subplots(3)
# plot the data on each subplot and add lagend
axes[0].plot(x, y1, c='r', label="sine")
axes[0].legend(loc='upper left')
axes[1].plot(x, y2, c='g', label="cosine")
axes[1].legend(loc='upper left')
axes[2].plot(x, y3, c='b', label="tan")
axes[2].legend(loc='upper left')
# Display the figure
plt.show()
执行上述代码,我们将得到以下输出 −
Adding multiple legends in one axes
要在 Matplotlib 中的同一轴上绘制多个图例,我们可以将 axes.add_artist() 方法与 legend() 函数结合使用。
Example 2
以下示例演示了如何在 matplotlib 图形的一个轴中添加多个图例。
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7, 4]
plt.rcParams["figure.autolayout"] = True
# plot some data
line1, = plt.plot([1, 2, 3], label="Line 1", linestyle='--')
line2, = plt.plot([3, 2, 1], label="Line 2", linewidth=4)
# Add first legend at upper right of the axes
first_legend = plt.legend(handles=[line1], loc='upper right')
# Get the current axes to add legend
plt.gca().add_artist(first_legend)
# Add second legend at lower right of the axes
plt.legend(handles=[line2], loc='lower right')
# Display the output
plt.show()
执行上述代码,我们将得到以下输出 −