matplotlib图上的不同背景颜色区域

tho*_*hor 2 python plot matplotlib

我正在绘制一个随时间变化的变量,我想以交通灯样式指示该变量的严重性。

 |
 |
 |           red
 |
 |
y|              /
 |             /   yellow
 |      ___   /
 |     /   \_/
 |    /           green
 |   /
 |_____________________________
             x
Run Code Online (Sandbox Code Playgroud)

因此,对于低y值,背景为绿色,对于中间y值为黄色/琥珀色,对于高y值为红色。最终看起来有点像三条纹标志。

由于我经常重新绘制图形,并且y比例可能会改变,因此情况变得更加复杂,因此我不能只在图形上放置固定框,除非每次绘制图形时都要计算框的大小。

有没有办法用matplotlib做到这一点?

我目前的绘图代码:

import matplotlib.pyplot as plt

plt.plot(x, y, 'k')
plt.grid(b=True)
ax = plt.gca()
ax.set_facecolor("some colour")
Run Code Online (Sandbox Code Playgroud)

Dav*_*idG 5

您可以使用轻松完成此操作ax.axhspan()。您将必须传递要着色的区域的y坐标(这是一个手动过程)

import matplotlib.pyplot as plt

x = [1,2,3,4,5,6,7,8]  #fake data
y = [1,2,3,4,3,2,9,12]

fig, ax = plt.subplots()

ax.plot(x, y, 'k')
ax.grid()
ax.margins(0) # remove default margins (matplotlib verision 2+)

ax.axhspan(0, 4, facecolor='green', alpha=0.5)
ax.axhspan(4, 9, facecolor='yellow', alpha=0.5)
ax.axhspan(9, 12, facecolor='red', alpha=0.5)

plt.show()
Run Code Online (Sandbox Code Playgroud)

这使:

在此处输入图片说明