在matplotlib图中两点之间的区域填充颜色

41

如何在matplotlib绘图中两点之间添加阴影区域?

在下面的matplotlib示例中,我手动添加了黄色遮蔽区域,使用了Skitch。我想知道如何不用Skitch实现这个功能。

alt text

2个回答

59

你可以使用函数axvspan。优点是,垂直区域(或者说水平区域,对于axhspan)无论你如何平移/缩放图形,都会保持阴影。这里有一个完整的示例链接

以下是一个简单的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 500)
y = np.cos(3*x) - 2*np.cos(5*x) + 0.5*np.cos(6*x)

a = 5
b = 15

plt.axvspan(a, b, color='y', alpha=0.5, lw=0)
plt.plot(x, y)
plt.savefig('shade.png', dpi=300)
plt.show()

这导致结果为 这里输入图片描述


1

matplotlib的fill方法绘制填充多边形

fill方法的优点在于它可以轻松绘制复杂的多边形。每个多边形由其节点的x和y位置列表定义。

使用nicoguaro答案中的示例数据:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 500)
y = np.cos(3 * x) - 2 * np.cos(5 * x) + 0.5 * np.cos(6 * x)

border = 0.25
y_min, y_max = min(y) - border, max(y) + border

a = 5
b = 15

plt.plot(x, y)
plt.fill([a, a, b, b], [y_min, y_max, y_max, y_min], color = 'green', alpha = 0.5)
plt.ylim(ymin = y_min, ymax = y_max)
plt.show()

给出以下图像:

enter image description here

没有必要像我设置最小和最大y限制。如果不设置,阴影区域上下将会有一个白色边框。


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