web-dev-qa-db-fra.com

Traitant: Comment obtenir l'attribut de couleur de trace afin de tracer le marqueur sélectionné de la même couleur?

J'essaie de tracer un marqueur sélectionné pour chacune de mes traces dans tracé. Je voudrais affecter la même couleur au marqueur et à la ligne. Y a-t-il une façon de faire passer l'attribut couleur de mes traces?

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

6
Christian

Vous pouvez récupérer la couleur d'une trace en utilisant:

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

Mais vous devrez spécifier la couleur de la trace pour pouvoir le faire. Ou vous pouvez vous assurer que la couleur des marqueurs suive la même séquence que les traces. Mais nous pouvons accéder à tous les détails si cela est en fait ce que vous essayez d'accomplir:

enter image description here

Si vous étudiez l'extrait de code ci-dessous, vous verrez que je, contrairement à vous, n'a pas défini les marqueurs de la même manière que les lignes. Au contraire, j'ai ajouté les traces comme des lignes pures avec mode='lines' puis ajouté des traces séparées pour les marqueurs avec mode='markers'. Lorsque cela fait ce dernier, j'ai récupéré les couleurs des lignes correspondantes en utilisant color=data['line']['color'] dans une boucle:

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()

Edit 1: Comment faire la même chose en référençant la séquence de couleur par défaut

Par défaut, suit traitant une séquence de couleur pouvant être trouvée à l'aide de px.colors.qualitative.Plotly:

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

L'extrait suivant produira exactement le même chiffre qu'auparavant, mais wihtout avoir à définir les couleurs des traces.

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()
1
vestland