# 路徑效果指南
> 原文:[Path effects guide](http://matplotlib.org/users/patheffects_guide.html)
> 譯者:[飛龍](https://github.com/)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
Matplotlib 的`patheffects`模塊提供了一些功能,用于將多個繪制層次應用到任何藝術家,并可以通過路徑呈現。
可以對其應用路徑效果的藝術家包括`Patch`,`Line2D`,`Collection`,甚至文本。 每個藝術家的路徑效果都可以通過`set_path_effects`方法(`set_path_effects`)控制,它需要一個`AbstractPathEffect`的可迭代實例。
最簡單的路徑效果是普通效果,它簡單地繪制藝術家,并沒有任何效果:
```py
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()
```

## 添加陰影
比正常效果更有趣的路徑效果是陰影,我們可以應用于任何基于路徑的藝術家。 `SimplePatchShadow`和`SimpleLineShadow`類通過在基本藝術家下面繪制填充補丁或線條補丁來實現它:
```py
import matplotlib.pyplot as plt
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`路徑效果使其相對簡單:
```py
import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects
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()
```

重要的是注意,這種效果能夠工作,因為我們已經繪制兩次文本路徑:一次使用粗黑線,然后另一次使用原始文本路徑在上面繪制。
您可能已經注意到,`Stroke`、`SimplePatchShadow`和`SimpleLineShadow`的關鍵字不是通常的`Artist`關鍵字(例如`facecolor`和`edgecolor`等)。這是因為使用這些路徑效果,我們操作了 matplotlib 的較低層。實際上,接受的關鍵字是用于`matplotlib.backend_bases.GraphicsContextBase`實例的關鍵字,它們為易于創建新的后端而設計,而不是用于其用戶界面。
## 對路徑效果藝術家的更大控制
如前所述,一些路徑效果的操作級別低于大多數用戶操作,這意味著設置關鍵字(如`facecolor`和`edgecolor`)會導致`AttributeError`。幸運的是,有一個通用的`PathPatchEffect`路徑效果,它創建一個具有原始路徑的`PathPatch`類。此效果的關鍵字與`PathPatch`相同:
```py
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()
```
