问题描述
我试图填充图中的区域 (allDevSalaries >= pythonDevSalaries )。但是,在我执行代码后,它没有显示正在填充的区域。我提供了下面的代码及其生成的图表。有人可以帮我吗?
from matplotlib import pyplot as plt
age = [21,22,23]
allDevSalaries = [12000,13000,13500]
pythonDevSalaries = [13000,12000,14545]
plt.plot(age,allDevSalaries,label='All Dev')
plt.plot(age,pythonDevSalaries,label='Python Dev')
plt.fill_between(age,where=(allDevSalaries >= pythonDevSalaries ),interpolate=True,color='red',label='Above Avg',alpha=0.25)
plt.legend()
plt.xlabel('AGE')
plt.ylabel('SALARY')
plt.title('SALARY per AGE graph')
#plt.grid()
plt.show()
解决方法
你的 where
子句是罪魁祸首。
来自文档:
其中:布尔数组(长度为 N),可选,默认值:无
它需要一个布尔值数组,而您通过比较两个 Python 列表来为它提供一个布尔值。
allDevSalaries = [12000,13000,13500]
pythonDevSalaries = [13000,12000,14545]
print(allDevSalaries > pythonDevSalaries) # -> False
此代码将起作用:
plt.fill_between(age,pythonDevSalaries,allDevSalaries,where=([a >= b for a,b in zip(allDevSalaries,pythonDevSalaries)]),interpolate=True,color='red',label='Above Avg',alpha=0.25)
或者,您可以使用 numpy 数组,它们在相互比较时返回一组布尔值,就像您想要的那样。
import numpy as np
...
where=(np.asarray(allDevSalaries) >= np.asarray(pythonDevSalaries)) # -> [False True False]