Управление порядком стеков области альтаира - PullRequest
3 голосов
/ 16 апреля 2019

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

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

enter image description here

Я пытался сделать игрушечный пример:

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',                                                                               
                )

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

enter image description here

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

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',                                                                               
                )

1 Ответ

1 голос
/ 16 апреля 2019

Вы можете использовать канал 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')
)

enter image description here

...