Альтаир с накоплением области с пользовательской сортировкой - PullRequest
1 голос
/ 21 апреля 2020

Как указать пользовательский порядок (т. Е. Список строк) для сортировки диаграммы с областями с накоплением?

Я бы хотел отсортировать области в порядке ['B', 'A', ' C '] от низшего к высшему на графике, независимо от значения. Я посмотрел документацию по 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)

1 Ответ

2 голосов
/ 21 апреля 2020

Вы можете сделать это, используя канал 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

...