Plotly: Как построить прямоугольник с градиентным цветом в Plotly? - PullRequest
2 голосов
/ 01 апреля 2020

Может ли форма, такая как прямоугольник, иметь плавный градиент цвета в Plotly?

Я определяю форму с solid цветом заливки как:

shapes=[dict(
    type='rect',
    xref='x',
    yref='paper',
    x0=box_from, x1=box_to,
    y0=0, y1=1,
    fillcolor='Green',
    opacity=0.07,
    layer='below',
    line=dict(width=0),
)]

Но я бы например, поле не должно иметь solid цветовой заливки, но должно иметь плавный градиент цвета.

Я думаю, что ответ простой "не поддерживается", но, возможно, кто-то другой знает лучше.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Кто-то исправит меня, если я ошибаюсь, но я думаю, что нет, нет прямой реализации, чтобы заполнить градиентом фигуру. Но для достижения аналогичных результатов вы могли бы построить несколько линий внутри прямоугольника, указывая уменьшающиеся значения rgb.

Например, я добавил это для l oop после первого определения прямоугольника в коде документации (изменив также цвет заливки прямоугольника на белый).

for i in range(100):
    fig.add_shape(type='line',
    xref="x",
    yref="y",
    x0=2.5,
    x1=3.5,
    y0=i*(2/100),
    y1=i*(2/100),
    line=dict(
                color='rgb({}, {}, {})'.format((i/100*255),(i/100*255),(i/100*255)),
                width=3,
            ))

И результат:

enter image description here

Я знаю, что это нецелесообразно и может немного увеличиться время работы, но если вы заботитесь только об эстете c, он делает свою работу.

1 голос
/ 01 апреля 2020

Глядя на отличное предложение Эдоардо Герье, вы также можете рассмотреть возможность использования rgba(0,0,0,0), где последнее число устанавливает непрозрачность цвета. Таким образом, фон будет постепенно появляться за прямоугольником:

enter image description here

Полный код:

import plotly.graph_objs as go

fig=go.Figure()

for i in range(100):
    opac = 1-(i/100)
    fig.add_shape(type='line',
    xref="x",
    yref="y",
    x0=2.5,
    x1=3.5,
    y0=i*(2/100),
    y1=i*(2/100),
    line=dict(color='rgba({}, {}, {}, {})'.format((0),(0),(255),(opac)),
              width=5,))



fig.update_xaxes(range=[2, 4])
fig.update_yaxes(range=[-1, 2.5])

fig.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...