Matplotlib 简明教程
Matplotlib - Anchored Artists
在 Matplotlib 中, Artist 是表示绘图中几乎所有组件的基本对象。无论是线、文本、轴还是任何其他图形元素,Matplotlib 绘图中的所有内容都是 Artist
的实例或从 Artist
类派生而来。
Anchored Artists 是自定义 artist 的特殊类型,可以锚定到绘图上的特定位置。它们可用于添加注释、箭头和其他锚定在特定点或区域上的自定义元素。
请参见下面的参考示例 −
在上图中,您可以观察到文本框、圆环和大小栏被固定在绘图上的特定位置。
Anchored Artists in Matplotlib
在 Matplotlib 中有两个提供固定化对象的模块,分别是 −
-
Matplotlib.offsetbox
-
Mpl_toolkits.axes_grid1.anchored_artists
The matplotlib.offsetbox module
此模块提供了 AnchoredOffsetbox 和 AnchoredText 类,允许您相对于父轴或特定锚点固定任意的对象或文本。它们可用于更通用的注释和修饰。
现在,我们使用 matplotlib.offsetbox 模块中的 AnchoredText 类在绘图上的特定位置实现两个 anchored text boxes 。
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()
执行上述代码,我们将得到以下输出 −
The mpl_toolkits.axes_grid1.anchored_artists module
此模块提供了 AnchoredDirectionArrows 、 AnchoredAuxTransformBox 、 AnchoredDrawingArea 和 AnchoredSizeBar 等特殊固定化对象。该类的每一个都用于不同的目的。
我们来看每个类的用法 −
-
AnchoredAuxTransformBox − 一个具有转换坐标的固定化容器。
-
AnchoredDirectionArrows − 绘制两个垂直箭头以指示方向。
-
AnchoredDrawingArea − 一个具有固定大小和可填充绘图区域的固定化容器。
-
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()
执行上述代码,我们将得到以下输出 −