Я пытаюсь использовать Альтаир для создания столбчатой диаграммы с накоплением. Я хотел бы пометить каждый столбец с процентами от общего количества всех столбцов в порядке убывания. Вот как я создаю два слоя (один для столбцов, один для надписей):
import pandas as pd
import altair as alt
df1 = pd.DataFrame({'a': list('AAAABBBB'),
'b': list('xxyyxxyy'),
'c': [2, 7, 4, 1, 2, 6, 8, 4]})
df2 = df1.groupby('a', as_index=False).sum()
df2['pct'] = (df2['c'] / df2['c'].sum()).round(2)
bars = alt.Chart(df1).mark_bar().encode(
x=alt.X('c', scale=alt.Scale(domain=[0, 22])),
y=alt.Y('a', sort=alt.EncodingSortField(field='c', order='descending')),
color='b',
)
text = alt.Chart(df2).mark_text(dx=15).encode(
x='c',
y=alt.Y('a', sort=alt.EncodingSortField(field='c', order='descending')),
text='c'
)
Каждый слой отсортирован в правильном порядке и выглядит хорошо. Но когда я их объединяю, сортировка сбрасывается, и они больше не сортируются по убыванию.
both = bars + text
both
Как сохранить сортировку баров, когдаобъединение слоев?