Флажок Altair по умолчанию

#python #data-visualization #visualization #altair

#python #визуализация данных #визуализация #altair

Вопрос:

Я пытаюсь создать диаграмму Altair с флажком. По умолчанию флажок снят, но я бы хотел, чтобы значение по умолчанию было установлено. Флажок HTML имеет атрибут «checked» для достижения этой цели, но я не знаю, как передать это через API Altair. Возможно ли это?

В приведенном ниже примере ряды «A» и «B» начинают окрашиваться, а флажки не установлены. Желаемым поведением было бы, чтобы флажки были отмечены, а когда они не отмечены, соответствующие ряды будут выделены серым цветом.

 data = pd.DataFrame(
    {
        "Block":("A", "A", "B", "A", "B", "A"),
        "X":(10, 15, 11, 30, 45, 9),
        "Y":(1.1, 10, 3.5, 5, 10, 20),
    }
)

a_data = data.loc[data["Block"] == "A"]
b_data = data.loc[data["Block"] == "B"]
a_filter = alt.binding_checkbox()
b_filter = alt.binding_checkbox()
a_select = alt.selection_single(
    fields=["Block"], bind=a_filter, name="A"
)
b_select = alt.selection_single(
    fields=["Block"], bind=b_filter, name="B"
)
a_cond = alt.condition(
    a_select, alt.Color("Block:N"), alt.value("lightgray")
)
b_cond = alt.condition(
    b_select, alt.Color("Block:N"), alt.value("lightgray")
)
a_chart = alt.Chart(a_data).mark_point(filled=True).encode(
    x="X:Q",
    y=alt.Y(
        "Y:Q", scale=alt.Scale(type="log")
    ),
    color=a_cond
).add_selection(a_select)
b_chart = alt.Chart(b_data).mark_point(filled=True).encode(
    x="X:Q",
    y=alt.Y(
        "Y:Q", scale=alt.Scale(type="log")
    ),
    color=b_cond
).add_selection(b_select)
(a_chart   b_chart)
  

Пример диаграммы

Ответ №1:

Altair версии 2 (текущая версия) не поддерживает выбор по умолчанию.

Версия Altair 3 (которая будет выпущена очень скоро) поддерживает выбор по умолчанию, используя init параметр, который вы сможете использовать следующим образом:

 a_select = alt.selection_single(
    fields=["Block"], bind=a_filter, name="A", init={'Block': 'A'}
)
b_select = alt.selection_single(
    fields=["Block"], bind=b_filter, name="B", init={'Block': 'B'}
)
  

Комментарии:

1. Спасибо! С нетерпением ждем релиза!

2. Я загрузил версию для разработки и попробовал код, используя аргумент «init». Работает для одного «щелчка», но затем выбранные элементы остаются серыми. Отправил проблему в репозиторий GitHub.

3. Похоже, это ошибка в выборе Vega-Lite 3, не связанная с тем, используете ли вы init.