[Python] Créez des tracés de coordonnées parallèles codés par couleur par catégorie avec Plotly Express

Je ne peux pas bien coder en couleur les tracés de coordonnées parallèles avec des données catégorielles

La bibliothèque God plot (correctement la bibliothèque wrapper) et le vénéré Plotly Express

import plotly.express as px

px.parallel_categories(
    px.data.tips(), color="size"
)

Il est facile d'écrire un tracé de coordonnées parallèles avec des données de catégorie, mais contrairement à d'autres tracés, il n'est pas possible de passer les données de catégorie pandas.Series ou List au paramètre color. Je peux le faire autour de la ligne scatter, mais ...

px.parallel_categories(
    px.data.tips(), color="time"
)

Et, lors du passage de la colonne size remplie avec le type ʻint à la colonne time` des données de catégorie, l'erreur suivante se produit,

ValueError: 
    Invalid element(s) received for the 'color' property of parcats.line
        Invalid elements include: ['Dinner', 'Dinner', 'Dinner', 'Dinner', 'Dinner', 'Dinner', 'Dinner', 'Dinner', 'Dinner', 'Dinner']

    The 'color' property is a color and may be specified as:
      - A hex string (e.g. '#ff0000')
      - An rgb/rgba string (e.g. 'rgb(255,0,0)')
      - An hsl/hsla string (e.g. 'hsl(0,100%,50%)')
      - An hsv/hsva string (e.g. 'hsv(0,100%,100%)')
      - A named CSS color:
            aliceblue, antiquewhite, aqua, aquamarine, azure,
            beige, bisque, black, blanchedalmond, blue,
            blueviolet, brown, burlywood, cadetblue,
            chartreuse, chocolate, coral, cornflowerblue,
            cornsilk, crimson, cyan, darkblue, darkcyan,
            darkgoldenrod, darkgray, darkgrey, darkgreen,
            darkkhaki, darkmagenta, darkolivegreen, darkorange,
            darkorchid, darkred, darksalmon, darkseagreen,
            darkslateblue, darkslategray, darkslategrey,
            darkturquoise, darkviolet, deeppink, deepskyblue,
            dimgray, dimgrey, dodgerblue, firebrick,
            floralwhite, forestgreen, fuchsia, gainsboro,
            ghostwhite, gold, goldenrod, gray, grey, green,
            greenyellow, honeydew, hotpink, indianred, indigo,
            ivory, khaki, lavender, lavenderblush, lawngreen,
            lemonchiffon, lightblue, lightcoral, lightcyan,
            lightgoldenrodyellow, lightgray, lightgrey,
            lightgreen, lightpink, lightsalmon, lightseagreen,
            lightskyblue, lightslategray, lightslategrey,
            lightsteelblue, lightyellow, lime, limegreen,
            linen, magenta, maroon, mediumaquamarine,
            mediumblue, mediumorchid, mediumpurple,
            mediumseagreen, mediumslateblue, mediumspringgreen,
            mediumturquoise, mediumvioletred, midnightblue,
            mintcream, mistyrose, moccasin, navajowhite, navy,
            oldlace, olive, olivedrab, orange, orangered,
            orchid, palegoldenrod, palegreen, paleturquoise,
            palevioletred, papayawhip, peachpuff, peru, pink,
            plum, powderblue, purple, red, rosybrown,
            royalblue, rebeccapurple, saddlebrown, salmon,
            sandybrown, seagreen, seashell, sienna, silver,
            skyblue, slateblue, slategray, slategrey, snow,
            springgreen, steelblue, tan, teal, thistle, tomato,
            turquoise, violet, wheat, white, whitesmoke,
            yellow, yellowgreen
      - A number that will be interpreted as a color
        according to parcats.line.colorscale
      - A list or array of any of the above

Dans size, ʻUn nombre qui sera interprété comme une couleur selon parcats.line.colorscale` a été créé, mais ce n'est plus possible.

Mais

time_color_map = {t: i for i, t in enumerate(px.data.tips()["time"].unique())}
colors = px.data.tips()["time"].replace(time_color_map)
px.parallel_categories(
    px.data.tips(), color=colors
)

Quand tu fais

qiita-sample.png

La «couleur» que je voulais juste définir comme valeur d'échelle de couleur est également affichée sur le graphique. C'est redondant et je déteste ça ... N'est-il pas possible de créer un tracé de coordonnées parallèles clairement codé par couleur avec des données catégorielles?

Réduisez les colonnes à afficher avec les dimensions

time_color_map = {t: i for i, t in enumerate(px.data.tips()["time"].unique())}
colors = px.data.tips()["time"].replace(time_color_map)
px.parallel_categories(
    px.data.tips(), color=colors, dimensions=["sex", "smoker", "day", "time", "size"]
)

qiita-sample-2.png

Puisque vous pouvez réduire les colonnes à afficher avec les dimensions, vous pouvez le faire en supprimant les colonnes inutiles ici!

Résumé

Hmmm, mais je veux que l'interface soit correcte avec les données de catégorie pandas.Series sans aucune astuce ...

Recommended Posts

[Python] Créez des tracés de coordonnées parallèles codés par couleur par catégorie avec Plotly Express
[Python] Ecrire des graphiques multilignes dans Plotly Express
Créer Spatia Lite en Python
Téléchargement parallèle avec Python
Créer une fonction en Python
Créer un dictionnaire en Python
Exécuter Python unittest en parallèle
Trier par date en python
Créer un conteneur DI avec Python
Dessinez des nœuds de manière interactive avec Plotly (Python)
Créer un fichier binaire en Python
Créez Gmail en Python sans utiliser l'API
Créer une documentation de projet Python dans Sphinx
Lire des fichiers en parallèle avec Python
Créer une chaîne aléatoire en Python
Créer et lire des paquets de messages en Python