如何删除matplotlib文本边框,同时使文本位于绘制线前面的第一个平面中?
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [1, 2, 3]
plt.plot(x, y)
plt.text(2.85, 2.9, 'label', bbox={'facecolor':'white', 'alpha':1, 'pad':10})
plt.show()
答案 0 :(得分:8)
您是否询问如何在不添加背后的框的情况下使文字更加醒目?如果是这样,请看看最后几个例子。
文字已经在线前,很难区分这两者。但是,通常,元素的顺序由zorder
kwarg控制。
为了证明这一点,我将更改示例中字体的颜色和大小,以使事情更清晰:
import matplotlib.pyplot as plt
x = [1, 2, 3]
y =[1, 2, 3]
fig, ax = plt.subplots()
ax.plot(x, y, linewidth=10, color='yellow')
ax.text(2, 2, 'label', ha='center', size=72)
# For the moment, hide everything else...
ax.axis('off')
fig.tight_layout()
plt.show()
如果我们将文本的z顺序降低到该行的z顺序以下或者将该行的zorder增加到高于该行的行的zorder,则该行将位于前面。默认情况下,大多数绘制的数据类型的zorder为1,而文本等注释的zorder为3,如果我没记错的话。不过,这只是zorder
的相对值。换句话说,无论我们是ax.text(..., zorder=0)
还是ax.plot(..., zorder=4)
,我们都会得到相同的结果。
import matplotlib.pyplot as plt
x = [1, 2, 3]
y =[1, 2, 3]
fig, ax = plt.subplots()
ax.plot(x, y, linewidth=10, color='yellow')
ax.text(2, 2, 'label', ha='center', size=72, zorder=0)
# For the moment, hide everything else...
ax.axis('off')
fig.tight_layout()
plt.show()
然而,您可能希望实现的是一种更清晰的方式来显示标签和线条。
在这种情况下,您有几种不同的选择。
让我们回到你原来的例子。您可以在文本后面显示框,但删除框上的边缘颜色。所以,如果你将'edgecolor':'none'
添加到bbox
kwarg的dict中,你会得到类似的东西:
import matplotlib.pyplot as plt
x = [1, 2, 3]
y =[1, 2, 3]
plt.plot(x, y)
plt.text(2.85, 2.9, 'label',
bbox={'facecolor':'white', 'edgecolor':'none', 'pad':10})
plt.show()
或者作为使用前面带黄线的代码片段的示例:
但是,如果我们不仅仅是一条简单的线条,这看起来就不那么好了。因此,您可能还需要考虑使用笔划路径效果:
import matplotlib.pyplot as plt
import matplotlib.patheffects as pe
x = [1, 2, 3]
y =[1, 2, 3]
fig, ax = plt.subplots()
ax.plot(x, y, linewidth=10, color='yellow')
ax.text(2, 2, 'label', ha='center', size=72,
path_effects=[pe.withStroke(linewidth=10, foreground='w')])
# For the moment, hide everything else...
ax.axis('off')
fig.tight_layout()
fig.set(facecolor='white')
plt.show()