Matplotlib - 锚定艺术家



在 Matplotlib 中,**艺术家 (Artist)** 是一个基本对象,它表示绘图中几乎所有组件。无论是线条、文本、轴还是任何其他图形元素,Matplotlib 绘图中的所有内容都是艺术家 (Artist) 的实例或派生自艺术家 (Artist) 类。

**锚定艺术家 (Anchored Artists)** 是一种特殊的自定义艺术家,可以锚定到绘图上的特定位置。它们可用于添加注释、箭头和其他锚定到特定点或区域的自定义元素。

请参阅以下示例以供参考 -

Anchored Artists_intro

在上图中,您可以观察到文本框、圆形和尺寸条都锚定在绘图上的特定位置。

Matplotlib 中的锚定艺术家

在 Matplotlib 中有两个模块提供锚定艺术家,它们是 -

  • Matplotlib.offsetbox

  • Mpl_toolkits.axes_grid1.anchored_artists

matplotlib.offsetbox 模块

此模块提供诸如 **AnchoredOffsetbox** 和 **AnchoredText** 之类的类,允许您相对于父轴或特定锚点锚定任意艺术家或文本。这些可用于更通用的注释和装饰。

示例

现在,让我们使用 **matplotlib.offsetbox** 模块中的 **AnchoredText** 类在绘图上的特定位置实现两个**锚定文本框**。

import matplotlib.pyplot as plt
from matplotlib.offsetbox import AnchoredText

# Create a figure and axis
fig, ax = plt.subplots(figsize=(7, 4))

# Anchored Text Box 1
at = AnchoredText("Anchored text-box 1",
   loc='upper left', prop=dict(size=10), frameon=True)
at.patch.set_boxstyle("round,pad=0.,rounding_size=0.2")
ax.add_artist(at)

# Anchored Text Box 2
at2 = AnchoredText("Anchored text-box 2",
   loc='center', prop=dict(size=16), frameon=True,
   bbox_to_anchor=(0.5, 0.5),
   bbox_transform=ax.transAxes)
at2.patch.set_boxstyle("round,pad=0.,rounding_size=0.5")
ax.add_artist(at2)

# Display the plot
plt.show()
输出

执行上述代码后,我们将获得以下输出 -

Anchored Artists Example 1

mpl_toolkits.axes_grid1.anchored_artists 模块

此模块提供诸如 **AnchoredDirectionArrows**、**AnchoredAuxTransformBox**、**AnchoredDrawingArea** 和 **AnchoredSizeBar** 之类的专用锚定艺术家。每个类用于不同的目的。

让我们看看每个类的用法 -

  • **AnchoredAuxTransformBox** - 一个带有转换坐标的锚定容器。

  • **AnchoredDirectionArrows** - 绘制两个垂直箭头以指示方向。

  • **AnchoredDrawingArea** - 一个具有固定大小和可填充 DrawingArea 的锚定容器。

  • **AnchoredSizeBar** - 绘制一个水平比例尺,下方带有居中对齐的标签。

示例

此示例演示了如何使用 AnchoredDirectionArrows 类向 Matplotlib 绘图添加视觉上吸引人的锚定方向箭头。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredDirectionArrows

np.random.seed(19680801)

fig, ax = plt.subplots(figsize=(7, 4))
ax.imshow(np.random.random((10, 10)))

# Rotated arrow
fontprops = fm.FontProperties(family='serif')

rotated_arrow = AnchoredDirectionArrows(
   ax.transAxes,
   '30', '120',
   loc='center',
   color='w',
   angle=30,
   fontproperties=fontprops
)
ax.add_artist(rotated_arrow)

plt.show()
输出

执行上述代码后,我们将获得以下输出 -

Anchored Artists Example 2
广告