路徑效果指南
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
Matplotlib 的patheffects
模塊提供了一些功能吗垮,用于將多個繪制層次應用到任何藝術(shù)家机错,并可以通過路徑呈現(xiàn)。
可以對其應用路徑效果的藝術(shù)家包括Patch
,Line2D
,Collection
,甚至文本呀忧。 每個藝術(shù)家的路徑效果都可以通過set_path_effects
方法(set_path_effects
)控制,它需要一個AbstractPathEffect
的可迭代實例溃睹。
最簡單的路徑效果是普通效果而账,它簡單地繪制藝術(shù)家,并沒有任何效果:
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()
添加陰影
比正常效果更有趣的路徑效果是陰影因篇,我們可以應用于任何基于路徑的藝術(shù)家泞辐。 SimplePatchShadow
和SimpleLineShadow
類通過在基本藝術(shù)家下面繪制填充補丁或線條補丁來實現(xiàn)它:
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 *
類竞滓,來包含“正掣篮穑”效果之后的所需功能,而后者明確定義要繪制的兩個路徑效果商佑。
讓藝術(shù)家脫穎而出
使藝術(shù)家在視覺上脫穎而出的一個好方法是锯茄,在實際藝術(shù)家下面以粗體顏色繪制輪廓。 Stroke
路徑效果使其相對簡單:
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()
重要的是注意,這種效果能夠工作肌幽,因為我們已經(jīng)繪制兩次文本路徑:一次使用粗黑線晚碾,然后另一次使用原始文本路徑在上面繪制。
您可能已經(jīng)注意到牍颈,Stroke
迄薄、SimplePatchShadow
和SimpleLineShadow
的關鍵字不是通常的Artist
關鍵字(例如facecolor
和edgecolor
等)。這是因為使用這些路徑效果煮岁,我們操作了 matplotlib 的較低層讥蔽。實際上,接受的關鍵字是用于matplotlib.backend_bases.GraphicsContextBase
實例的關鍵字画机,它們?yōu)橐子趧?chuàng)建新的后端而設計冶伞,而不是用于其用戶界面。
對路徑效果藝術(shù)家的更大控制
如前所述步氏,一些路徑效果的操作級別低于大多數(shù)用戶操作响禽,這意味著設置關鍵字(如facecolor
和edgecolor
)會導致AttributeError
。幸運的是荚醒,有一個通用的PathPatchEffect
路徑效果芋类,它創(chuàng)建一個具有原始路徑的PathPatch
類。此效果的關鍵字與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()