Альтаир двойное выпадающее меню - PullRequest
2 голосов
/ 30 января 2020

Я хочу создать сюжет с двумя выпадающими меню. Непрозрачность линий должна зависеть от выбора в обоих выпадающих меню.

В идеале возможное содержимое второго раскрывающегося меню («dropdown_symbol» ниже) должно зависеть от выбора в первом раскрывающемся меню (когда «категория_2» выбрана в первом раскрывающемся списке, показывать только «AMZM» и «IBM»). "во втором раскрывающемся списке).

К сожалению, ни помутнения не работают должным образом, ни ограничение возможного содержимого. Вот мой пример кода:

import altair as alt
from vega_datasets import data

source = data.stocks()
source.symbol.value_counts()


source["category"] = "category_1"
source.loc[source["symbol"].isin(["AMZN", "IBM"]), "category"] = "category_2"


dropdown_category = alt.binding_select(options=list(source["category"].unique()), name=" ")
dropdown_symbol = alt.binding_select(options=list(source["symbol"].unique()), name=" ")

selection_category = alt.selection_single(fields=["category"], bind=dropdown_category)
selection_symbol = alt.selection_single(fields=["symbol"], bind=dropdown_symbol)

chart = alt.Chart(source).mark_line().encode(
    x='date',
    y='price',
    color='symbol',
    opacity=alt.condition(
        selection_category & selection_symbol,
        alt.value(1),
        alt.value(0.1)
)).add_selection(selection_symbol, selection_category)

chart

enter image description here

1 Ответ

2 голосов
/ 30 января 2020

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

Если вы хотите, чтобы непрозрачность зависела от выбора в двух выпадающих меню, вы можете использовать оператор alt.condition и передать два объекта выбора с логическим оператором; например:

opacity=alt.condition(
        selection1 & selection2,
        alt.value(1),
        alt.value(0.1))

выберет первое значение, только если точка находится в пределах обоих выборов. В качестве альтернативы,

opacity=alt.condition(
        selection1 | selection2,
        alt.value(1),
        alt.value(0.1))

выберет первое значение, если точка находится в пределах хотя бы одного от выборов.

Обратите внимание, что при использовании нескольких выборов таким образом, есть известная ошибка в поведении для пустых выборов; см. https://github.com/altair-viz/altair/issues/1759 и ссылки в нем.

В идеале возможное содержимое второго раскрывающегося меню ("dropdown_symbol" ниже) должно зависеть от выбора в первом раскрывающемся меню (когда " Категория_2 "выбрана в первом раскрывающемся списке, отображать только" AMZM "и" IBM "во втором раскрывающемся списке.)

В Altair невозможно изменить содержимое раскрывающегося меню в динамическом режиме. для выбора в другом выпадающем меню.

Чтобы это изменить, необходимо добавить функцию в Vega-Lite: вы можете подавать запросы на функции здесь .

...