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'})