Альтаир: разделение цветовых схем в составных диаграммах

В приведенном ниже примере я хочу использовать зеленую цветовую схему для экспорта и красную для импорта. Когда я отдельно создаю диаграммы, все хорошо, они получают цветовую схему, которую я им назначаю. Однако, когда я объединяю диаграммы, они оба получают красную схему.

import pandas as pd
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]

exports = {'fruits' : fruits,
           '2015'   : [2, 1, 4, 3, 2, 4],
           '2016'   : [5, 3, 4, 2, 4, 6],
           '2017'   : [3, 2, 4, 4, 5, 3]}
imports = {'fruits' : fruits,
           '2015'   : [-1, 0, -1, -3, -2, -1],
           '2016'   : [-2, -1, -3, -1, -2, -2],
           '2017'   : [-1, -2, -1, 0, -2, -2]}

df_exp = pd.DataFrame(exports)
df_imp = pd.DataFrame(imports)

import altair as alt

cols_year_imp = df_imp.columns[1:]
cols_year_exp = df_exp.columns[1:]

imp = alt.Chart(df_imp).transform_fold(
    list(cols_year_imp)
).mark_bar(
    tooltip=True
).encode(
    x='value:Q',
    y='fruits:N',
    color=alt.Color('key:O', scale=alt.Scale(scheme='reds'))
)

exp = alt.Chart(df_exp).transform_fold(
    list(cols_year_exp)
).mark_bar(
    tooltip=True
).encode(
    x=alt.X('value:Q',title="Export"),
    y='fruits:N',
    color=alt.Color('key:O', scale=alt.Scale(scheme='greens', reverse=True)),
    order=alt.Order('key:O', sort='ascending')
)

# imp | exp
imp
exp
alt.hconcat(imp, exp)

вывод: https://i.stack.imgur.com/jFvu6.png

введите описание изображения здесь


person viydanofyi    schedule 08.02.2021    source источник
comment
См. altair-viz.github.io/user_guide/scale_resolve.html.   -  person jakevdp    schedule 08.02.2021


Ответы (1)


Вы можете использовать resolve_scale на конкатенированном рисунке:

alt.hconcat(imp, exp).resolve_scale(color='independent')

введите описание изображения здесь

person joelostblom    schedule 08.02.2021