matplotlib: 如何缓冲标签文本?

23 投票
1 回答
9734 浏览
提问于 2025-04-18 18:03

我想在matplotlib中给注释文本加一个彩色的边框。下面这张在QGIS中截取的截图展示了它的样子(是红色的)

GIS中的带边框文本

我尝试过的办法

我最初的尝试是把“某些文本”画两次,使用不同的字体大小和字体粗细。结果看起来都不太好。虽然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练习以重现带边框文本

所以我的问题是

在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")])

示例输出,显示白色文字的红色轮廓

撰写回答