Управление порядком стеков области альтаира

1

У меня есть диаграмма mark_area которая складывается в явно бессмысленном порядке. Я бы предпочел заказать слои с наибольшим снизу и уменьшением сверху.

Вот изображение графика, помеченное в предпочтительном порядке:

Изображение 174551

Я попытался сделать игрушку-пример:

import random
import altair as alt

seed = {"date": pd.date_range('1/1/2019',periods=20,freq="M"),
        "jack": random.sample(range(100, 500), 20), 
        "roy":random.sample(range(20, 90), 20),
        "bill":random.sample(range(600, 900), 20), 
        }

df = pd.DataFrame.from_dict(seed)
df = df.melt(id_vars="date", var_name="person", value_name="measure")
alt.renderers.enable('notebook')
alt.Chart(df).mark_area().encode(
                        x=alt.X(
                            'date',                        
                        ),
                        y=alt.Y(
                            'measure',
                        ),
                        color='person',                                                                               
                )

Это автоматически создает диаграмму как:

Изображение 174551

Я пытался повторно использовать некоторые заклинания, найденные в других местах, но они молча не имели никакого эффекта. Нет разницы, использую ли я "восходящий" или "нисходящий":

alt.Chart(df).mark_area().encode(
                        x=alt.X(
                            'date',                        
                        ),
                        y=alt.Y(
                            'measure',
                             sort=alt.EncodingSortField(
                                field="measure",
                                op="sum",
                                order="ascending")  
                        ),
                        color='person',                                                                               
                )
Теги:
altair

1 ответ

0

Вы можете использовать канал order для управления порядком стека. Например:

import random
import altair as alt
import pandas as pd

df = pd.DataFrame({
    "date": pd.date_range('1/1/2019',periods=20,freq="M"),
    "jack": random.sample(range(100, 500), 20), 
    "roy":random.sample(range(20, 90), 20),
    "bill":random.sample(range(600, 900), 20), 
})
df = df.melt(id_vars="date", var_name="person", value_name="measure")
alt.Chart(df).mark_area().encode(
    x='date',       
    y='measure',
    color='person',
    order=alt.Order('measure:Q', sort='descending')
)

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню