在matplotlib图中填充两点之间的区域
如何在一个 matplotlib 图表中添加两个点之间的阴影区域?
在下面这个 matplotlib 的例子中,我是手动用 Skitch 添加了一个阴影的黄色区域。我想知道怎么不用 Skitch 来做到这一点。
2 个回答
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()
这会生成如下图形:
其实设置y轴的最小值和最大值并不是绝对必要的。如果不设置的话,填充区域的上下会有白色的边框。
60
你可以直接使用 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()
这样就会得到如下结果:
