matplotlib: 如何缓冲标签文本?
我想在matplotlib中给注释文本加一个彩色的边框。下面这张在QGIS中截取的截图展示了它的样子(是红色的):
我尝试过的办法
我最初的尝试是把“某些文本”画两次,使用不同的字体大小和字体粗细。结果看起来都不太好。虽然bbox
的解决方案“有效”,但它的美观程度和带边框的文本不一样。
%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
# font size
plt.annotate(
'Some text', xy=(.5, .75), color=(.7, .7, .7),
ha='center', va='center', fontsize='20')
plt.annotate(
'Some text', xy=(.5, .75), color=(.2, .3, .8),
ha='center', va='center', fontsize='16')
# font weight
plt.annotate(
'Some text', xy=(.5, .5), color=(.7, .7, .7),
ha='center', va='center', fontsize='16', weight='bold')
plt.annotate(
'Some text', xy=(.5, .5), color=(.2, .3, .8),
ha='center', va='center', fontsize='16')
# bbox
plt.annotate(
'Some text', xy=(.5, .25), color=(.2, .3, .8),
ha='center', va='center', fontsize='16',
bbox=dict(fc=(.7, .7, .7), lw=0, pad=5))
结果
所以我的问题是
在matplotlib中,(如何)能否以合理的努力重现带边框的文本?
1 个回答
51
这里有一个详细的演示,展示了如何使用路径效果给各种图形对象加轮廓,具体内容可以在这里找到。下面是一个简单的例子,主要关注文本元素。
import matplotlib.pyplot as plt
import matplotlib.patheffects as pe
fig, ax = plt.subplots()
txt = ax.text(0.5, 0.5, "test",
size=20,
color='white',
path_effects=[pe.withStroke(linewidth=4, foreground="red")])