路径效果指南#

定义对象在画布上遵循的路径。

Matplotlib 的patheffects模块提供了将多个绘制阶段应用于任何可以通过path.Path.

可以对其应用路径效果的艺术家包括patches.Patch、 甚至。每个艺术家的路径效果都可以通过该方法控制,该方法采用可迭代的实例。lines.Line2Dcollections.Collectiontext.TextArtist.set_path_effectsAbstractPathEffect

最简单的路径效果是Normal效果,它只是简单地绘制了艺术家,没有任何效果:

import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects

fig = plt.figure(figsize=(5, 1.5))
text = fig.text(0.5, 0.5, 'Hello path effects world!\nThis is the normal '
                          'path effect.\nPretty dull, huh?',
                ha='center', va='center', size=20)
text.set_path_effects([path_effects.Normal()])
plt.show()
路径效果指南

虽然情节看起来与您在没有任何路径效果的情况下所期望的没有任何不同,但文本的绘制现在已更改为使用路径效果框架,从而为更多有趣的示例开辟了可能性。

添加阴影#

Normal阴影更有趣的路径效果,我们可以将其应用于任何基于路径的艺术家。类SimplePatchShadowSimpleLineShadow通过在原始艺术家下方绘制填充补丁或线条补丁来精确执行此操作:

import matplotlib.patheffects as path_effects

text = plt.text(0.5, 0.5, 'Hello path effects world!',
                path_effects=[path_effects.withSimplePatchShadow()])

plt.plot([0, 3, 2, 5], linewidth=5, color='blue',
         path_effects=[path_effects.SimpleLineShadow(),
                       path_effects.Normal()])
plt.show()
路径效果指南

请注意此示例中设置路径效果的两种方法。第一个使用with*类来包含自动跟随“正常”效果的所需功能,而后者明确定义要绘制的两个路径效果。

让艺术家脱颖而出#

使艺术家在视觉上脱颖而出的一种好方法是在实际艺术家下方以粗体绘制轮廓。路径效应使这Stroke成为一项相对简单的任务:

fig = plt.figure(figsize=(7, 1))
text = fig.text(0.5, 0.5, 'This text stands out because of\n'
                          'its black border.', color='white',
                          ha='center', va='center', size=30)
text.set_path_effects([path_effects.Stroke(linewidth=3, foreground='black'),
                       path_effects.Normal()])
plt.show()
路径效果指南

需要注意的是,这种效果只有在我们绘制了两次文本路径后才有效;一次用粗黑线,然后一次用原始文本路径在顶部。

您可能已经注意到关键字 toStroke和不是通常的 Artist 关键字(SimplePatchShadow facecolor edgecolor)。这是因为有了这些路径效果,我们在较低级别的 Matplotlib 上运行。事实上,被接受的关键字是用于实例的关键字,这些关键字旨在使创建新后端变得容易 - 而不是其用户界面。SimpleLineShadow matplotlib.backend_bases.GraphicsContextBase

更好地控制路径效果艺术家#

如前所述,某些路径效果的操作级别比大多数用户习惯的要低,这意味着设置诸如 facecoloredgecolor 之类的关键字会引发 AttributeError。幸运的是,有一个通用PathPatchEffect路径效果,它patches.PathPatch 使用原始路径创建了一个类。此效果的关键字与 的关键字相同patches.PathPatch

fig = plt.figure(figsize=(8.5, 1))
t = fig.text(0.02, 0.5, 'Hatch shadow', fontsize=75, weight=1000, va='center')
t.set_path_effects([
    path_effects.PathPatchEffect(
        offset=(4, -4), hatch='xxxx', facecolor='gray'),
    path_effects.PathPatchEffect(
        edgecolor='white', linewidth=1.1, facecolor='black')])
plt.show()
路径效果指南

由 Sphinx-Gallery 生成的画廊