我想对曲线下的区域进行着色。这是我的尝试:
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))
但是,这不会在曲线下正确着色。
你如何正确地做到这一点?
最佳答案
使用where
使用 fill_ Between
的 where
参数可以选择填充的范围。
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()
这样做的一个问题可能是原始曲线中最接近所选边界的点可能仍然距离太远,从而可能会出现间隙。
值得注意的是,如果您选择的点足够密集,或者就此而言,足够明智,那么此类问题就可以避免。 IE。使用 101 个点,这样 2.0 和 3.0 实际上是数据的一部分,
x = np.linspace(0, 10, 101)
会产生漂亮的图片:
绘制曲线的精炼版本。
因此,在更密集的网格上重新评估您的函数并独立绘制它可能是有意义的。
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()
关于python - 如何为曲线下的区域添加阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56976122/