Python >> Tutoriel Python >  >> Python Tag >> Plotly

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

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 suit la même séquence que les traces. Mais nous pouvons accéder à tous les détails si c'est bien ce que vous essayez d'accomplir :

Si vous étudiez l'extrait de code ci-dessous, vous verrez que, contrairement à vous, je n'ai pas défini les marqueurs de la même manière que les lignes. Au lieu de cela, j'ai ajouté les traces sous forme de lignes pures avec mode='lines' puis ajouté des traces séparées pour les marqueurs avec mode='markers' . En faisant ce dernier, j'ai récupéré les couleurs des lignes correspondantes en utilisant color=data['line']['color'] en 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 de même en faisant référence à la séquence de couleurs par défaut

Par défaut, plotly suit une séquence de couleurs qui peut être trouvée en utilisant px.colors.qualitative.Plotly :

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

L'extrait de code suivant produira exactement la même figure qu'avant, mais sans 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()