python - 如何为曲线下的区域添加阴影

标签 python matplotlib scipy

我想对曲线下的区域进行着色。这是我的尝试:

from scipy.stats import lognorm
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.linspace(0,10,100)
plt.vlines(2, 0, lognorm.pdf(2,1), color='r', linestyles='solid')
plt.vlines(3, 0, lognorm.pdf(3,1), color='r', linestyles='solid')
plt.fill_between([2,3], [lognorm.pdf(2,1), lognorm.pdf(3,1)], color='red')
plt.plot(xpoints, lognorm.pdf(xpoints,1))

但是,这不会在曲线下正确着色。

enter image description here

你如何正确地做到这一点?

最佳答案

使用where

使用 fill_ Betweenwhere 参数可以选择填充的范围。

from scipy.stats import lognorm
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = lognorm.pdf(x, 1)

plt.vlines(2, 0, lognorm.pdf(2, 1), color='r', linestyles='solid')
plt.vlines(3, 0, lognorm.pdf(3, 1), color='r', linestyles='solid')

plt.fill_between(x, y, where=((x >= 2) & (x <= 3)), color='red')
plt.plot(x, y)

plt.show()

enter image description here

这样做的一个问题可能是原始曲线中最接近所选边界的点可能仍然距离太远,从而可能会出现间隙。

值得注意的是,如果您选择的点足够密集,或者就此而言,足够明智,那么此类问题就可以避免。 IE。使用 101 个点,这样 2.0 和 3.0 实际上是数据的一部分,

x = np.linspace(0, 10, 101)

会产生漂亮的图片:

enter image description here

绘制曲线的精炼版本。

因此,在更密集的网格上重新评估您的函数并独立绘制它可能是有意义的。

from scipy.stats import lognorm
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = lognorm.pdf(x, 1)

plt.vlines(2, 0, lognorm.pdf(2, 1), color='r', linestyles='solid')
plt.vlines(3, 0, lognorm.pdf(3, 1), color='r', linestyles='solid')

xf = np.linspace(2, 3, 301)
yf = lognorm.pdf(xf, 1)
plt.fill_between(xf, yf, color='red')
plt.plot(x, y)

plt.show()

enter image description here

关于python - 如何为曲线下的区域添加阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56976122/

相关文章:

python - 编写一个简单的 "Rock Paper Scissors"游戏机器人

python - Matplotlib 具有相同类变量的多个动画

python - 从直方图创建条形图,python matplotlib

python - 操纵样条的导数

python - 爬取时存储 URL

Python 重载不存在的运算符有效,为什么?

python - 如何在Python中计算非常小的数字的二项式概率?

python - 如何在不丢失索引的情况下转换 pandas 中的数据框?

Python - print link.get href - 打印输出 url 仅用逗号分隔

python - 使用 Python Pandas 读取 excel 并隔离列/行以进行绘图