нанесите разноцветные фоновые прямоугольники на график по нескольким осям

#python #matplotlib

#python #matplotlib

Вопрос:

Следующий код представляет собой фрагмент из гораздо более крупной функции, которая отображает несколько финансовых показателей по 3 осям:

 left, width = 0.1, 0.8
rect1 = [left, 0.7, width, 0.2]
rect2 = [left, 0.3, width, 0.4]
rect3 = [left, 0.1, width, 0.2]
fig = plt.figure(facecolor='white')
axescolor = '#f6f6f6'  # the axes background color
ax1 = fig.add_axes(rect1)#, axisbg=axescolor)  # left, bottom, width, height
ax2 = fig.add_axes(rect2,sharex=ax1)#, axisbg=axescolor)
ax3 = fig.add_axes(rect3,sharex=ax1)#, axisbg=axescolor
  

Окончательный график выглядит так:

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

Теперь я хочу добавить фоновые прямоугольники высотой, которая покрывает всю ось x (т. Е. По всей оси) и Шириной в несколько минут, вот так:

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

Как я могу это сделать?

Ответ №1:

Это работает :

 ax1.axvspan(start, end, facecolor='g', alpha=0.25, label=my_label)
  

Комментарии:

1. Спасибо за ваш ответ! Я отметил первый ответ, потому что он появился раньше. Но ваше решение также работает.

2. Я отметил ваше решение сейчас, поскольку оно может быть достигнуто без импорта дополнительного модуля. И, к сожалению, предложенное выше решение patches недоступно в среде ipython, которую я использую, поскольку модуль patches занесен поставщиками в черный список.

3. Это действительно проще!

4. Он более лаконичный, но немного менее гибкий, чем первое решение. Однако идеально подходит для моей конкретной проблемы.

5. Простой и лучший!!

Ответ №2:

Вы можете использовать patches matplotlib

 import matplotlib.patches as patches

left, width = 0.1, 0.8
rect1 = [left, 0.7, width, 0.2]
rect2 = [left, 0.3, width, 0.4]
rect3 = [left, 0.1, width, 0.2]
fig = plt.figure(facecolor='white')
axescolor = '#f6f6f6'  # the axes background color
ax1 = fig.add_axes(rect1)#, axisbg=axescolor)  # left, bottom, width, height
ax2 = fig.add_axes(rect2,sharex=ax1)#, axisbg=axescolor)
ax3 = fig.add_axes(rect3,sharex=ax1)#, axisbg=axescolor
ax1.add_patch(patches.Rectangle(
        (0.1, 0.1),   # (x,y)
        0.5,          # width
        0.5,          # height
        alpha = 0.5)) #transparency