微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在尝试在 Python 中使用 Matplotlib 执行代码,并在使用 fill_between() for matplotlib 3.3.0 时遇到以下问题

如何解决我正在尝试在 Python 中使用 Matplotlib 执行代码,并在使用 fill_between() for matplotlib 3.3.0 时遇到以下问题

我试图填充图中的区域 (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()

enter image description here

解决方法

你的 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]

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。