fill_between() не работает

У меня есть крошечная проблема с графиком, над которым я работаю. Я хотел бы заполнить область между 2 полувертикальными линиями, как показано ниже (чирок и серые):

Однако, когда я использую следующий код, я ничего не получаю:

plt.fill_between(x, y_1, y_2, facecolor = 'red')

Что я делаю неправильно?

С наилучшими пожеланиями, Greem

1 ответ

Диапазоны данных переменной x обеих строк полностью разделены, поэтому нет даже одной точки, в которой можно было бы выполнить заливку в направлении y.

Вы можете вместо этого заполнить направление х, что можно сделать с помощью fill_betweenx, Проблема в том, что значения y обеих строк различны. Поэтому необходимо будет интерполировать их так, чтобы fill_betweenx Можно использовать одинаковые значения y для заливки между двумя кривыми, которые изначально имеют разные значения y для разных значений x.

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60])
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34])

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71])
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58])

fig, ax= plt.subplots()
ax.plot(x1,y1, color="indigo")
ax.plot(x2,y2, color="crimson")

yi = np.sort(np.c_[y1,y2].flatten()) 
x1i = np.interp(yi, y1, x1)
x2i = np.interp(yi, y2, x2)

ax.fill_betweenx(yi, x1i, x2i, color="lemonchiffon")

plt.show()

введите описание изображения здесь

Альтернативой вышеупомянутому решению может быть рисование многоугольника с координатами обеих линий в качестве его краевых точек.

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60])
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34])

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71])
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58])

fig, ax= plt.subplots()
ax.plot(x1,y1, color="indigo")
ax.plot(x2,y2, color="crimson")

x = np.append(x1,x2[::-1])
y = np.append(y1,y2[::-1])

p = plt.Polygon(np.c_[x,y], color="lemonchiffon")
ax.add_patch(p)

plt.show()

введите описание изображения здесь

Другие вопросы по тегам