Давайте рассмотрим следующий пример:
Код: Выделить всё
from plotly.subplots import make_subplots
fig = make_subplots(rows=2, cols=1, shared_xaxes=True)
fig.add_vrect(x0=1, x1=2, row=1, col=1, opacity=0.5, fillcolor="grey")
fig.add_scatter(x=[1,3], y=[3,4], row=1, col=1)
fig.add_scatter(x=[2,2], y=[3,4], row=2, col=1)

Если мы добавим_vrect в конце, прямоугольник будет отображаться так, как я и ожидал.
Код: Выделить всё
fig = make_subplots(rows=2, cols=1, shared_xaxes=True)
fig.add_scatter(x=[1,3], y=[3,4], row=1, col=1)
fig.add_scatter(x=[2,2], y=[3,4], row=2, col=1)
fig.add_vrect(x0=1, x1=2, row=1, col=1, opacity=0.5, fillcolor="grey")

Теперь, когда я отхожу от фиктивного примера к более сложному графику (3 подграфика, несколько осей Y, логарифмическое масштабирование, ось даты и времени), добавление последних прямоугольников тоже не помогает. Мне не удается визуализировать их для двух из трех подсюжетов.
Поэтому я пытаюсь лучше понять, как сюжетно это происходит под капотом. Судя по тому, что я понял на данный момент, прямоугольники являются фигурами и, следовательно, не являются частьюfigure.data, аfigure.layout. В приведенных выше фиктивных примерах фигуры добавляются в макет только во втором дубле. Почему?
Целесообразно ли использовать fig.add_shape(type="rect") при работе с более сложными графиками?
Или стоит отказаться и просто вручную возиться с fig.layout.shapes вместо использования вызовов функций?
Примеры сделаны с помощьюplotly 5.15.0.
Подробнее здесь: https://stackoverflow.com/questions/791 ... o-subplots
Мобильная версия