Plotly: Как получить атрибут цвета трассировки, чтобы нанести выбранный маркер на тот же цвет? - PullRequest
1 голос
/ 22 апреля 2020

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

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5],
    y=[0, 3, 5, 7, 9, 11],
    name='trace01',
    mode='lines+markers',
    marker=dict(size=[0, 0, 30, 0, 0, 0],
            color=[0, 0, 10, 0, 0, 0])
))
fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5],
    y=[3, 5, 7, 9, 11, 13],
    name='trace02',
    mode='lines+markers',
    marker=dict(size=[0, 0, 0, 30, 0, 0],
            color=[0, 0, 0, 10, 0, 0])
))
fig.show()

enter image description here

Ответы [ 2 ]

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

Вы можете получить цвет трассы, используя:

fig['data'][0]['line']['color']

Но вам придется указать цвет трассы, чтобы сделать это. Или вы можете убедиться, что цвет маркеров соответствует последовательности следов. Но мы можем получить все подробности, если это именно то, что вы пытаетесь выполнить sh:

enter image description here

Если вы изучаете код Из приведенного ниже фрагмента вы увидите, что я, в отличие от вас, не определил маркеры в том же go, что и строки. Скорее я добавил следы как чистые линии с mode='lines', а затем добавил отдельные следы для маркеров с mode='markers'. При выполнении последнего я извлек цвета соответствующих строк, используя color=data['line']['color'] в al oop:

import plotly.graph_objects as go

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5],
    y=[0, 3, 5, 7, 9, 11],
    name='trace01',
    line=dict(color='blue'),
    mode='lines',

))
fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5],
    y=[3, 5, 7, 9, 11, 13],
    name='trace02',
    line=dict(color='red'),
    mode='lines'

))

markers = [[2,5],
           [3,9]]

for i, data in enumerate(fig['data']):
    #print(data['line']['color'])
    fig.add_trace(go.Scatter(x=[markers[i][0]], y=[markers[i][1]],
                   mode='markers',
                   name=None,
                   showlegend=False,
                   marker=dict(color=data['line']['color'],
                               size=15
                    )))
fig.show()

Редактировать 1: Как сделать то же самое, ссылаясь на цвет по умолчанию sequence

По умолчанию, plotly следует последовательности цветов, которую можно найти с помощью px.colors.qualitative.Plotly:

['#636EFA',
 '#EF553B',
 '#00CC96',
 '#AB63FA',
 '#FFA15A',
 '#19D3F3',
 '#FF6692',
 '#B6E880',
 '#FF97FF',
 '#FECB52']

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

import plotly.graph_objects as go
import plotly.express as px

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5],
    y=[0, 3, 5, 7, 9, 11],
    name='trace01',
    mode='lines',

))
fig.add_trace(go.Scatter(
    x=[0, 1, 2, 3, 4, 5],
    y=[3, 5, 7, 9, 11, 13],
    name='trace02',
    mode='lines'

))

colors = px.colors.qualitative.Plotly

markers = [[2,5],
           [3,9]]

for i, data in enumerate(fig['data']):
    #print(data['line']['color'])
    fig.add_trace(go.Scatter(x=[markers[i][0]], y=[markers[i][1]],
                   mode='markers',
                   name=None,
                   showlegend=False,
                   marker=dict(color=colors[i],
                               size=15
                    )))
fig.show()
0 голосов
/ 08 мая 2020

Добавляя к ответу выше, помните, что Plotly в px.colors.qualitative.Plotly - это имя цветовой схемы, используемой в текущем шаблоне, по умолчанию Plotly. Вы можете использовать другие цветовые схемы, проверить их названия и цвета, выполнив это

import plotly.express as px

fig = px.colors.qualitative.swatches()
fig.show()

[Ссылка: https://plotly.com/python/discrete-color/]

...