path effect
matplotlib
的 patheffects
模块提供了一些函数来绘制 path effect
,该模块还定义了很多 effect
类。可以应用 path effect
的 Artist
有: Patch
、 Line2D
、 Collection
以及 Text
。每个 Artist
的 path effect
可以通过 .set_path_effects()
方法控制,其参数是一个可迭代对象,迭代的结果是 AbstractPathEffect
实例;也可以通过 Artist
构造函数的 path_effects=
关键字参数控制。
注意:
effect
类的关键字参数比如背景色、前景色等与Artist
不同。因为这些effect
类是更低层次的操作。
所有的 effect
类都继承自 matplotlib.patheffects.AbstractPathEffect
类。 AbstractPathEffect
的子类要覆盖 AbstractPathEffect
类的 .draw_path(...)
方法。
AbstractPathEffect
类的构造函数有个 offset
关键字参数,表示 effect
偏移(默认为 (0,0)
)
1. normal effect
最简单的 effect
是 normal effect
,它是 matplotlib.patheffects.Normal
类。它简单的绘制 Artist
,不带任何 effect
。
如:
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.',
ha='center', va='center', size=20)
text.set_path_effects([path_effects.Normal()])
plt.show()
2. drop-shadow effect
我们可以在基于 Path
的 Artist
上应用 drop-shadow effect
(下沉效果)。如可以在 filled patch Artist
上应用 matplotlib.patheffects.SimplePatchShadow
,在 line patch Artist
上应用 matplotlib.patheffects.SimpleLineShadow
。
你可以通过 path_effects=[path_effects.with*()]
来指定 path_effects
参数,或者直接通过 path_effects=[path_effects.SimpleLineShadow(),path_effects.Normal()]
来指定 path_effects
参数。
- 前者会自动地在
normal effect
后跟随指定的effect
- 后者会显式的指定
effect
3. stand-out effect
Strok effect
可以用于制作出 stand-out effect
(突出效果)。
4. 通用 PathPatchEffect
PathPatchEffect
是一个通用的 path effect
类。如果对某个 PathPatch
设置了 PathPatchEffect
,则该 effect
的 .draw_path(...)
方法执行的是由初始 PathPatch
计算的得到的一个新的 PathPatch
。
与一般的 effect
类不同, PathPatchEffect
类的关键字参数是与 PathPatch
一致的,因为除了 offset
关键字参数外,其他的任何关键字参数都会传递给 PathPatch
构造函数。如:
import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects
fig = plt.figure(figsize=(8, 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()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论