六、 path effect

  1. matplotlibpatheffects模块提供了一些函数来绘制path effect,该模块还定义了很多effect类。可以应用path effectArtist有:PatchLine2DCollection以及Text。每个Artistpath effect可以通过.set_path_effects()方法控制,其参数是一个可迭代对象,迭代的结果是AbstractPathEffect实例;也可以通过Artist构造函数的path_effects=关键字参数控制。

    注意:effect类的关键字参数比如背景色、前景色等与Artist不同。因为这些effect类是更低层次的操作。

  2. 所有的effect类都继承自matplotlib.patheffects.AbstractPathEffect类。AbstractPathEffect的子类要覆盖AbstractPathEffect类的.draw_path(...)方法。

    AbstractPathEffect类的构造函数有个offset关键字参数,表示effect偏移(默认为(0,0))

  3. 最简单的effectnormal effect,它是matplotlib.patheffects.Normal类。它简单的绘制Artist,不带任何effect

    如:

    1. import matplotlib.pyplot as plt
    2. import matplotlib.patheffects as path_effects
    3. fig = plt.figure(figsize=(5, 1.5))
    4. text = fig.text(0.5, 0.5, 'Hello path effects world!\nThis is the normal path effect.',
    5. ha='center', va='center', size=20)
    6. text.set_path_effects([path_effects.Normal()])
    7. plt.show()

    `normal effect`

  4. 我们可以在基于PathArtist上应用drop-shadow effect(下沉效果)。如可以在filled patch Artist上应用matplotlib.patheffects.SimplePatchShadow,在line patch Artist上应用matplotlib.patheffects.SimpleLineShadow

    `drop-shadow effect`

    你可以通过path_effects=[path_effects.with*()]来指定path_effects参数,或者直接通过path_effects=[path_effects.SimpleLineShadow(),path_effects.Normal()]来指定path_effects参数。

    • 前者会自动地在normal effect后跟随指定的effect
    • 后者会显式的指定effect
  5. Strok effect可以用于制作出stand-out effect(突出效果)。

    `stand-out effect`

  6. PathPatchEffect是一个通用的path effect类。如果对某个PathPatch设置了PathPatchEffect,则该effect.draw_path(...)方法执行的是由初始PathPatch计算的得到的一个新的PathPatch

    与一般的effect类不同,PathPatchEffect类的关键字参数是与PathPatch一致的,因为除了offset关键字参数外,其他的任何关键字参数都会传递给PathPatch构造函数。如:

    1. import matplotlib.pyplot as plt
    2. import matplotlib.patheffects as path_effects
    3. fig = plt.figure(figsize=(8, 1))
    4. t = fig.text(0.02, 0.5, 'Hatch shadow', fontsize=75, weight=1000, va='center')
    5. t.set_path_effects([path_effects.PathPatchEffect(offset=(4, -4), hatch='xxxx',
    6. facecolor='gray'),
    7. path_effects.PathPatchEffect(edgecolor='white', linewidth=1.1,
    8. facecolor='black')])
    9. plt.show()

    `PathPatchEffect`