Matplotlib 简明教程

Matplotlib - Artists

Understanding Artists in Matplotlib

在 Matplotlib 中,你几乎在绘图上看到的所有内容都是 Artist 的实例,它们是表示绘图的各个组成部分的对象。无论是表示数据的线条、文本标签,甚至是轴上的刻度线,Matplotlib 绘图中的所有内容都是 Artist 对象。

在探讨艺术家层级之前,让我们先观察以下图片以了解 matplotlib 中图形的基本组件 −

artists input

在图片中,每个元素(例如表示数据的线和点,以及次刻度线和点关联文本标签)都可以识别为单个艺术家对象。

Artist Hierarchy

在 matplotlib 的层级中,艺术家可以广泛分为两种类型 −

  1. Primitive Artists − 这些是绘图的基本构建块。示例包括 Line2DRectangleTextAxesImage 等等。这些是我们希望绘制到画布上的标准图形对象。

  2. Composite Artists − 这些是包含其他艺术家的高级结构。示例包括 FigureAxisAxes 。Figure 就像一个容纳所有内容的画布,而 Axes 表示图形中的一个具体绘图。

Creating and Accessing the Artists

艺术家通常通过 Axes 对象上的绘图方法创建。这些方法不仅促进了可视化元素的创建,还返回具体艺术家实例以对应于绘图元素。

以下是一些常见的绘图方法以及它们生成的对应艺术家 −

  1. annotate − 为文本注释生成一个 Annotation 艺术家。

  2. bar − 为条形图创建一个 Rectangle 艺术家。

  3. errorbar − 为误差棒图生成 Line2DRectangle 艺术家。

  4. fill − 为共享区域生成 Polygon 艺术家。

  5. hist − 为直方图创建 Rectangle 艺术家。

  6. imshow − 为图像数据生成 AxesImage 艺术家。

  7. legend − 为 Axes 图例生成 Legend 艺术家。

  8. plot − 为 XY 绘图创建 Line2D 艺术家。当绘制多个数据集时返回一个列表。

  9. scatter − 为散点图生成 PolyCollection 艺术家。

  10. text − 为在绘图上显示文本生成 Text 艺术家。

Example

让我们看看使用 plot() 方法创建和访问艺术家的示例。

import matplotlib.pyplot as plt
import matplotlib.artist as martist
import numpy as np

# Create a subplot
fig, ax = plt.subplots()

# Generate random data
x, y = np.random.rand(2, 100)

# Use the plot method to create a Line2D artist
lines = ax.plot(x, y, '-', label='example')

# Accessing the Line2D artists created by the plot method
print('Line2D artists created by the plot method:', lines)

# Retrieve all Line2D artists associated with the Axes
lines_on_axes = ax.get_lines()

# Display the retrieved Line2D artists
print('Line2D artists obtained using get_lines():', lines_on_axes)

# Accessing the first (and in this case, the only) Line2D artist
print('Accessing the first Line2D artist', ax.get_lines()[0])

执行上述代码,我们将得到以下输出 −

Line2D artists created by the plot method: [<matplotlib.lines.Line2D object at 0x000001DB3666A620>]
Line2D artists obtained using get_lines():
Accessing the first Line2D artist Line2D(example)