[Python] Erstellen Sie mit Plotly Express parallele Koordinatendiagramme, die nach Kategorien farbcodiert sind

Ich kann parallele Koordinatendiagramme mit kategorialen Daten nicht gut farbcodieren

Die God-Plot-Bibliothek (korrekt die Wrapper-Bibliothek) und der verehrte "Plotly Express"

import plotly.express as px

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

Es ist einfach, ein paralleles Koordinatendiagramm mit Kategoriedaten zu schreiben, aber im Gegensatz zu anderen Diagrammen ist es nicht möglich, die Kategoriedaten "pandas.Series" oder "List" an den Parameter "color" zu übergeben. Ich kann es um "Scatter" -Linie machen, aber ...

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

Beim Wechsel von der mit dem Typ "int" gefüllten Spalte "size" zur Spalte "time" der Kategoriedaten tritt der folgende Fehler auf:

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

In "Größe" wurde "Eine Zahl, die gemäß parcats.line.colorscale als Farbe interpretiert wird" erstellt, dies ist jedoch nicht mehr möglich.

Aber

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
)

Wenn Sie das tun

qiita-sample.png

Die Farbe, die ich nur als Farbskalenwert festlegen wollte, wird auch in der Grafik angezeigt. Es ist überflüssig und ich hasse es ... Ist es nicht möglich, ein paralleles Koordinatendiagramm zu erstellen, das eindeutig mit Kategoriedaten farbcodiert ist?

Grenzen Sie die anzuzeigenden Spalten mit "Dimensionen" ein

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

Da Sie die anzuzeigenden Spalten mit "Dimensionen" eingrenzen können, können Sie hier unnötige Spalten entfernen!

Zusammenfassung

Hmmm, aber ich möchte, dass die Benutzeroberfläche mit den Kategoriedaten pandas.Series ohne Tricks in Ordnung ist ...

Recommended Posts

[Python] Erstellen Sie mit Plotly Express parallele Koordinatendiagramme, die nach Kategorien farbcodiert sind
[Python] Schreiben Sie mehrzeilige Diagramme in Plotly Express
Erstellen Sie Spatia Lite in Python
Paralleler Download mit Python
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Führen Sie Python unittest parallel aus
Sortieren nach Datum in Python
Erstellen Sie einen DI-Container mit Python
Zeichnen Sie Knoten interaktiv mit Plotly (Python)
Erstellen Sie eine Binärdatei in Python
Erstellen Sie Google Mail in Python ohne Verwendung der API
Erstellen Sie eine Python-Projektdokumentation in Sphinx
Lesen Sie Dateien parallel zu Python
Erstellen Sie eine zufällige Zeichenfolge in Python
Erstellen und lesen Sie Messagepacks in Python