Сортировка граней сюжета Альтаира по групповой статистике - PullRequest
2 голосов
/ 19 июня 2019

Я хотел бы изменить порядок граней диаграммы Альтаира на основе статистики некоторых групп, такой как среднее, сигма и т. Д.

В некоторых случаях функция упорядочения может быть более сложной, например,как дельта между двумя скользящими средними, наклоном EWMA и т. д., поэтому я также хотел бы иметь возможность «проходить» в порядке, если это возможно.

Вот код тестируемого случая:

import pandas as pd
import numpy as np
import altair as alt

alt.renderers.enable('notebook')

# make some data to test
N = 500
df = pd.DataFrame({
    'Date Time': pd.date_range('2019-06-19', periods=N, freq='H'),
    'A':  np.random.normal(6, 1, N),
    'B': np.random.normal(5, 1, N),
    'C': np.random.normal(7, 1, N),
    'D': np.random.normal(8, 1, N)
}).melt('Date Time')

# render the chart using facets
p = alt.Chart(df).mark_point().encode(
    facet='variable',
    y='value',
    x='Date Time',
    color='variable',
)

# set some aditional properties
p.properties(width=230, height=150, columns=3).resolve_scale()

, который создает эту диаграмму, где грани сортируются в алфавитном порядке:

enter image description here

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

var_order = df.groupby('variable').mean().sort_values('variable', ascending=False).index.values
var_order

, который производит:

array(['D', 'C', 'B', 'A'], dtype=object)

Я прочитал некоторые посты, которые указывают, что сортировка по x и y возможна, но это тот случай, когда я хотел бы отсортировать сами грани.

1 Ответ

2 голосов
/ 19 июня 2019

Вы можете использовать EncodingSortField в кодировке facet; например,

p = alt.Chart(df).mark_point().encode(
    y='value',
    x='Date Time',
    color='variable',
    facet=alt.Facet('variable',
        sort=alt.EncodingSortField('value', op='mean', order='descending')
    )
)

# set some aditional properties
p.properties(width=230, height=150, columns=3).resolve_scale()

chart output

Для более сложных вычислений вы можете использовать преобразование вычисления и / или статистическое преобразование для вычисления нового поля и сортировки по нему.

...