स्टैक्ड एरिया चार्ट को सॉर्ट करने के लिए मैं कस्टम ऑर्डर (यानी स्ट्रिंग्स की सूची) कैसे निर्दिष्ट कर सकता हूं?

मैं मूल्य की परवाह किए बिना चार्ट पर क्षेत्रों को ['बी', 'ए', 'सी'] क्रम में क्रमबद्ध करना चाहता हूं। मैंने alt.Order के दस्तावेज़ीकरण को देखा लेकिन यह एक निश्चित कस्टम ऑर्डर के बजाय एकत्रीकरण पर आधारित प्रतीत होता है।

enter image description here

import altair as alt
import pandas as pd

df = pd.DataFrame(
    {'A': range(0,10),
    'B': range(0,20,2),
     'C': range(0,30,3)
    },
)
df['date'] = range(0,10)
df = df.melt(id_vars='date')

chart = alt.Chart(df).mark_area().encode(
    x="date",
    y=alt.Y("value:Q", stack='zero'),
    color="variable",
)
display(chart)
3
ac24 21 अप्रैल 2020, 14:21

1 उत्तर

सबसे बढ़िया उत्तर

आप इसे order चैनल और वांछित क्रम की गणना करने के लिए एक रूपांतरण का उपयोग करके कर सकते हैं। लेजेंड की sort प्रॉपर्टी को एडजस्ट करना भी मददगार होता है ताकि वह स्टैक ऑर्डर से मेल खाए:

alt.Chart(df).transform_calculate(
    order="{'B':0, 'A': 1, 'C': 2}[datum.variable]"  
).mark_area().encode(
    x="date",
    y=alt.Y("value:Q", stack='zero'),
    color=alt.Color("variable", sort=alt.SortField("order", "descending")),
    order="order:O"
)

enter image description here

4
jakevdp 21 अप्रैल 2020, 12:32