Заполнение пространства между двумя линиями на графике штриховкой

Рейтинг: 0Ответов: 1Опубликовано: 15.05.2023

Как заполнить пространство между двумя линиями на графике штриховкой, что бы выглядело как на вложенной картинке?

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

import matplotlib.pyplot as plt

# Интервалы по оси y
y1=[0, 1400]
y2=[1400, 1700]
y3=[1700, 2400]

# Интервалы по оси x верхние
x11=[1.12, 1.12]
x21=[1.58, 1.58]
plt.plot(x11,y1, color='r')
plt.plot(x21,y1, color='r')

# Интервалы по оси x средние
x12=[1.65, 1.65]
x22=[1.82, 1.82]
plt.plot(x12,y2, color='g')
plt.plot(x22,y2, color='g')

# Интервалы по оси x нижние
x13=[1.1, 1.1]
x23=[1.46, 1.46]
plt.plot(x13,y3, color='b')
plt.plot(x23,y3, color='b')

plt.gca().invert_yaxis()
plt.gca().axes.xaxis.set_ticks_position("top")
plt.show()

Ответы

▲ 1Принят

У вас неаккуратный код, так что пришлось потратить время, чтобы разобраться, что к чему.

Воспользуйтесь субмодулем patches:

import matplotlib.pyplot as plt
import matplotlib.patches as patches

fig, ax = plt.subplots()
# Интервалы по оси y
y1=[0, 1400]
y2=[1400, 1700]
y3=[1700, 2400]

# Интервалы по оси x верхние
x11=[1.12, 1.12]
x21=[1.58, 1.58]
ax.plot(x11,y1, color='r')
ax.plot(x21,y1, color='r')
patch = patches.Rectangle((x11[0],y1[0]), x21[0]-x11[0], y1[1], linewidth=0, fill=None, hatch='/', color="r")
# первый аргумент - координаты левого нижнего угла штриховки. второй и третий-
# ширина и высота соответственно.
ax.add_patch(patch)

# Интервалы по оси x средние
x12=[1.65, 1.65]
x22=[1.82, 1.82]
ax.plot(x12,y2, color='g')
ax.plot(x22,y2, color='g')
patch = patches.Rectangle((x12[0],y2[0]), x22[0]-x12[0], y2[1]-y2[0], linewidth=0, fill=None, hatch='/', color="g")
ax.add_patch(patch)


# Интервалы по оси x нижние
x13=[1.1, 1.1]
x23=[1.46, 1.46]
ax.plot(x13,y3, color='b')
ax.plot(x23,y3, color='b')
patch = patches.Rectangle((x13[0],y3[0]), x23[0]-x13[0], y3[1] - y3[0], linewidth=0, fill=None, hatch='/', color="b")
ax.add_patch(patch)


plt.gca().invert_yaxis()
plt.gca().axes.xaxis.set_ticks_position("top")
plt.show()

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