在Matplotlib中,如何避免axvspan重叠?

10
我注意到两个相邻的区域重叠,因此在中间出现了一条烦人的线。我尝试使用 "capstyle = 'butt'" 来避免线条之间的重叠,但是这里并没有起作用。
下面是一个最简示例:
import matplotlib.pylab as plt

ax = plt.subplot(111)

ax.axvspan(0, 0.5, color = 'red', alpha = 0.13, capstyle = 'butt')
ax.axvspan(0.5, 1, color = 'blue', alpha = 0.13, capstyle = 'butt')

plt.show()
2个回答

14

你遇到的问题不是由于线帽引起的,因为axvspan绘制的是一个多边形。问题在于默认情况下,这个多边形有一个带有给定线宽的边框(我想是一个像素)。

因此,要仅获取没有该“边框”的区域,请将线宽(lw)设置为零:

import matplotlib.pylab as plt

ax = plt.subplot(111)

ax.axvspan(0, 0.5, color = 'red', alpha = 0.13, lw=0)
ax.axvspan(0.5, 1, color = 'blue', alpha = 0.13, lw=0)

plt.show()


8

axvspan内使用facecolor代替color。@heltonbiker的解决方案非常好,它摆脱了边框的宽度。但是,在我使用的matplotlib版本2.0.0中,仅使用facecolor不会绘制边框。

import matplotlib.pylab as plt

fig,ax = plt.subplots()

ax.axvspan(0, 0.5, facecolor = 'red', alpha = 0.13)
ax.axvspan(0.5, 1, facecolor = 'blue', alpha = 0.13)

plt.show()

仅使用facecolor不会绘制边框: enter image description here 使用color将填充矩形并绘制边框: enter image description here

1
可能是,我正在使用1.5.1版本,而且这行代码存在。 - heracho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接