Заполенение пространства между двумя линиями на графике штриховкой
Как заполнить пространство между двумя линиями на графике штриховкой, что бы выглядело как на вложенной картинке?
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 шт):
Автор решения: strawdog
→ Ссылка
У вас неаккуратный код, так что пришлось потратить время, чтобы разобраться, что к чему.
Воспользуйтесь субмодулем 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()

