我正在绘制一个随时间变化的变量,我想以交通灯样式指示变量的严重程度。
|
|
| red
|
|
y| /
| / yellow
| ___ /
| / \_/
| / green
| /
|_____________________________
x
因此,对于低 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")
最佳答案
您可以使用 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()
这使: