Использование where
Использование аргумента where
для fill_between
позволяет выбрать диапазон, в котором должно выполняться заполнение.
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()
Проблема с этим может заключаться в том, что точка исходной кривой, которая находится ближе всего к выбранной границе, может все еще быть слишком далеко, так что могут возникнуть пропуски.
Стоит отметить, что если вы выберете точки достаточно плотные, или, если на то пошло, достаточно разумно, такие проблемы будут обойдены. То есть используя 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()