Как создать выпадающий список из заданной таблицы

#python #data-visualization #altair

#python #данные-визуализация #альтаир

Вопрос:

У меня есть следующая таблица: (из многих строк указан только фрагмент)

 |name_id | house  |  school | duration  |
|1       |red     | abc     |  20       |
|2       |yello   | dps     |  30       |
|3       |blue    | gdf     |  40       |
|4       |pink    | abc     |  20       |
|5       |red     | dps     |  10       |
|6       |blue    | gdf     |   5       |
 

И я хочу применить визуализацию таким образом, чтобы: были созданы два выпадающих меню для дома и школы.

Для создания моего визуального представления я использую следующее:

  1. У меня есть данные в виде фрейма данных pandas.
  2. Я использую код altair следующим образом:
 import altair as alt

input_dropdown1 = alt.binding_select(options=['abc','dps','gdf'])
input_dropdown2 = alt.binding_select(options=['red','yello','blue','pink'])
selection1 = alt.selection_single(fields=['house'], bind=input_dropdown1, name='belonging ')
selection2 = alt.selection_single(fields=['school'], bind=input_dropdown2, name='origin ')

 
alt.Chart(df1).mark_point().encode(
    x='name_id:Q',
    y='duration:Q',
    color='house'
).add_selection(
    selection1,
    selection2
) 

Однако код не отображается должным образом.

И когда я попытался создать только одно выпадающее меню — фильтрация не происходит.

Я использую altair в первый раз.

Идея именно здесь состоит в том, чтобы иметь график name_id в зависимости от продолжительности и использовать фильтры, чтобы более точно видеть график для каждого дома и школы.

Я был бы рад, если бы кто-нибудь мне помог.

Ответ №1:

Попробуйте это

 import altair as alt

input_dropdown1 = alt.binding_select(options=['abc','dps','gdf'])
input_dropdown2 = alt.binding_select(options=['red','yello','blue','pink'])
selection1 = alt.selection_single(fields=['house'], bind=input_dropdown1, name='belonging ')
selection2 = alt.selection_single(fields=['school'], bind=input_dropdown2, name='origin ')

 
alt.Chart(df1).mark_point().encode(
    x='name_id:Q',
    y='duration:Q',
    color='house',
    ##### added the opacity ,here
    opacity=alt.condition(
         selection1 amp; selection2,
         alt.value(1),
         alt.value(0.1)
)).add_selection(
    selection1,
    selection2
)