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

Plotly :Comment changer le jeu de couleurs d'un nuage de points plotly express ?

En règle générale, changer le jeu de couleurs pour une figure plotly express est très simple. Ce qui cause les problèmes ici est le fait que species est une variable catégorielle . Les valeurs continues ou numériques sont en fait plus faciles, mais nous y reviendrons dans un instant.

Pour les valeurs catégorielles, utilisez color_discrete_map est une approche parfaitement valide, quoique lourde. Je préfère utiliser l'argument mot-clé continuous_colorscale en combinaison avec px.colors.qualitative.Antique , où Antique peut être remplacé par l'un des schémas de couleurs discrets disponibles dans plotly express. Exécutez simplement dir(px.colors.qualitative) pour voir ce qui est disponible dans la version de plotly que vous utilisez :

['Alphabet',
 'Antique',
 'Bold',
 'D3',
 'Dark2',
 'Dark24',
 'G10',......]

Code 1 :

import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length",
                 color="species", color_discrete_sequence=px.colors.qualitative.Antique)

fig.show()

Parcelle 1 :

Qu'en est-il des variables continues ?

Considérez l'extrait suivant :

import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length",
                 color="sepal_length", color_continuous_scale=px.colors.sequential.Viridis)

fig.show()

L'exécution de ceci produira ce tracé :

Vous pouvez changer les couleurs pour n'importe quel autre thème disponible sous dir(px.colors.sequential) , par exemple color_continuous_scale=px.colors.sequential.Inferno , et obtenez ce tracé :

Ce qui est peut-être source de confusion ici, c'est que le paramètre color='species , et en gardant color_continuous_scale=px.colors.sequential.Inferno vous donnera ce tracé :

La figure revient maintenant directement à l'utilisation des couleurs de tracé par défaut, sans vous donnant un avertissement sur color_continuous_scale=px.colors.sequential.Inferno n'ayant pas d'effet. C'est parce que species est une variable catégorielle avec ces différentes valeurs :['setosa', 'versicolor', 'virginica'] , donc color_continuous_scale est tout simplement ignoré. Pour color_continuous_scale pour prendre effet, vous devrez utiliser une valeur numérique, comme sepal_length = [5.1, 4.9, 4.7, 4.6, 5. , 5.4, ...]

Et cela nous ramène à ma réponse initiale pour les valeurs catégorielles :

Utilisez l'argument de mot-clé continuous_colorscale en combinaison avec px.colors.qualitative


Vous pouvez utiliser une méthode appelée color_discrete_map , qui est un dict de k,v paires où le k est la valeur de la couleur et v est le jeu de couleurs. Par exemple :

fig = px.scatter(df, x='sepal_length', y='sepal_width',
              color='species', color_discrete_map={'setosa': 'lightcyan', 
                                                   'versicolor': 'royalblue', 'virginica': 'darkblue'})