删除matplotlib文本绘图边框

时间:2014-12-17 17:23:34

标签: python matplotlib plot visualization data-visualization

如何删除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()

1 个答案:

答案 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()

enter image description here

如果我们将文本的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()

enter image description here


更清晰的标签框

然而,您可能希望实现的是一种更清晰的方式来显示标签和线条。

在这种情况下,您有几种不同的选择。

让我们回到你原来的例子。您可以在文本后面显示框,但删除框上的边缘颜色。所以,如果你将'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()

enter image description here

或者作为使用前面带黄线的代码片段的示例:

enter image description here

对明文标签使用笔划效果

但是,如果我们不仅仅是一条简单的线条,这看起来就不那么好了。因此,您可能还需要考虑使用笔划路径效果:

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()

enter image description here