:orphan: :html_theme.sidebar_secondary.remove: .. This document is auto-generated by the altair-gallery extension. Do not modify directly. .. _gallery_multiple_interactions: Multiple Interactions ===================== This example shows how multiple user inputs can be layered onto a chart. The four inputs have functionality as follows: * Dropdown: Filters the movies by genre * Radio Buttons: Highlights certain films by Worldwide Gross * Mouse Drag and Scroll: Zooms the x and y scales to allow for panning. .. altair-plot:: :remove-code: import altair as alt from vega_datasets import data movies = alt.UrlData( data.movies.url, format=alt.DataFormat(parse={"Release_Date":"date"}) ) ratings = ['G', 'NC-17', 'PG', 'PG-13', 'R'] genres = ['Action', 'Adventure', 'Black Comedy', 'Comedy', 'Concert/Performance', 'Documentary', 'Drama', 'Horror', 'Musical', 'Romantic Comedy', 'Thriller/Suspense', 'Western'] base = alt.Chart(movies, width=200, height=200).mark_point(filled=True).transform_calculate( Rounded_IMDB_Rating = "floor(datum.IMDB_Rating)", Hundred_Million_Production = "datum.Production_Budget > 100000000.0 ? 100 : 10", Release_Year = "year(datum.Release_Date)" ).transform_filter( alt.datum.IMDB_Rating > 0 ).transform_filter( alt.FieldOneOfPredicate(field='MPAA_Rating', oneOf=ratings) ).encode( x=alt.X('Worldwide_Gross:Q', scale=alt.Scale(domain=(100000,10**9), clamp=True)), y='IMDB_Rating:Q', tooltip="Title:N" ) # A slider filter year_slider = alt.binding_range(min=1969, max=2018, step=1, name="Release Year") slider_selection = alt.selection_point(bind=year_slider, fields=['Release_Year']) filter_year = base.add_params( slider_selection ).transform_filter( slider_selection ).properties(title="Slider Filtering") # A dropdown filter genre_dropdown = alt.binding_select(options=genres, name="Genre") genre_select = alt.selection_point(fields=['Major_Genre'], bind=genre_dropdown) filter_genres = base.add_params( genre_select ).transform_filter( genre_select ).properties(title="Dropdown Filtering") #color changing marks rating_radio = alt.binding_radio(options=ratings, name="Rating") rating_select = alt.selection_point(fields=['MPAA_Rating'], bind=rating_radio) rating_color_condition = alt.condition( rating_select, alt.Color('MPAA_Rating:N', legend=None), alt.value('lightgray') ) highlight_ratings = base.add_params( rating_select ).encode( color=rating_color_condition ).properties(title="Radio Button Highlighting") # Boolean selection for format changes input_checkbox = alt.binding_checkbox(name="Big Budget Films ") checkbox_selection = alt.param(bind=input_checkbox) size_checkbox_condition = alt.condition( checkbox_selection, alt.Size('Hundred_Million_Production:Q'), alt.SizeValue(25) ) budget_sizing = base.add_params( checkbox_selection ).encode( size=size_checkbox_condition ).properties(title="Checkbox Formatting") (filter_year | filter_genres) & (highlight_ratings | budget_sizing) .. tab-set:: .. tab-item:: Method syntax :sync: method .. code:: python import altair as alt from vega_datasets import data movies = alt.UrlData( data.movies.url, format=alt.DataFormat(parse={"Release_Date":"date"}) ) ratings = ['G', 'NC-17', 'PG', 'PG-13', 'R'] genres = [ 'Action', 'Adventure', 'Black Comedy', 'Comedy', 'Concert/Performance', 'Documentary', 'Drama', 'Horror', 'Musical', 'Romantic Comedy', 'Thriller/Suspense', 'Western' ] base = alt.Chart(movies, width=200, height=200).mark_point(filled=True).transform_calculate( Rounded_IMDB_Rating = "floor(datum.IMDB_Rating)", Big_Budget_Film = "datum.Production_Budget > 100000000 ? 'Yes' : 'No'", Release_Year = "year(datum.Release_Date)", ).transform_filter( alt.datum.IMDB_Rating > 0 ).transform_filter( alt.FieldOneOfPredicate(field='MPAA_Rating', oneOf=ratings) ).encode( x=alt.X('Worldwide_Gross:Q').scale(domain=(100000,10**9), clamp=True), y='IMDB_Rating:Q', tooltip="Title:N" ) # A slider filter year_slider = alt.binding_range(min=1969, max=2018, step=1, name="Release Year") slider_selection = alt.selection_point(bind=year_slider, fields=['Release_Year']) filter_year = base.add_params( slider_selection ).transform_filter( slider_selection ).properties(title="Slider Filtering") # A dropdown filter genre_dropdown = alt.binding_select(options=genres, name="Genre") genre_select = alt.selection_point(fields=['Major_Genre'], bind=genre_dropdown) filter_genres = base.add_params( genre_select ).transform_filter( genre_select ).properties(title="Dropdown Filtering") # Color changing marks rating_radio = alt.binding_radio(options=ratings, name="Rating") rating_select = alt.selection_point(fields=['MPAA_Rating'], bind=rating_radio) rating_color_condition = alt.condition( rating_select, alt.Color('MPAA_Rating:N').legend(None), alt.value('lightgray') ) highlight_ratings = base.add_params( rating_select ).encode( color=rating_color_condition ).properties(title="Radio Button Highlighting") # Boolean selection for format changes input_checkbox = alt.binding_checkbox(name="Big Budget Films ") checkbox_selection = alt.param(bind=input_checkbox) size_checkbox_condition = alt.condition( checkbox_selection, alt.Size('Big_Budget_Film:N').scale(range=[25, 150]), alt.SizeValue(25) ) budget_sizing = base.add_params( checkbox_selection ).encode( size=size_checkbox_condition ).properties(title="Checkbox Formatting") (filter_year | budget_sizing) & (highlight_ratings | filter_genres) .. tab-item:: Attribute syntax :sync: attribute .. code:: python import altair as alt from vega_datasets import data movies = alt.UrlData( data.movies.url, format=alt.DataFormat(parse={"Release_Date":"date"}) ) ratings = ['G', 'NC-17', 'PG', 'PG-13', 'R'] genres = ['Action', 'Adventure', 'Black Comedy', 'Comedy', 'Concert/Performance', 'Documentary', 'Drama', 'Horror', 'Musical', 'Romantic Comedy', 'Thriller/Suspense', 'Western'] base = alt.Chart(movies, width=200, height=200).mark_point(filled=True).transform_calculate( Rounded_IMDB_Rating = "floor(datum.IMDB_Rating)", Hundred_Million_Production = "datum.Production_Budget > 100000000.0 ? 100 : 10", Release_Year = "year(datum.Release_Date)" ).transform_filter( alt.datum.IMDB_Rating > 0 ).transform_filter( alt.FieldOneOfPredicate(field='MPAA_Rating', oneOf=ratings) ).encode( x=alt.X('Worldwide_Gross:Q', scale=alt.Scale(domain=(100000,10**9), clamp=True)), y='IMDB_Rating:Q', tooltip="Title:N" ) # A slider filter year_slider = alt.binding_range(min=1969, max=2018, step=1, name="Release Year") slider_selection = alt.selection_point(bind=year_slider, fields=['Release_Year']) filter_year = base.add_params( slider_selection ).transform_filter( slider_selection ).properties(title="Slider Filtering") # A dropdown filter genre_dropdown = alt.binding_select(options=genres, name="Genre") genre_select = alt.selection_point(fields=['Major_Genre'], bind=genre_dropdown) filter_genres = base.add_params( genre_select ).transform_filter( genre_select ).properties(title="Dropdown Filtering") #color changing marks rating_radio = alt.binding_radio(options=ratings, name="Rating") rating_select = alt.selection_point(fields=['MPAA_Rating'], bind=rating_radio) rating_color_condition = alt.condition( rating_select, alt.Color('MPAA_Rating:N', legend=None), alt.value('lightgray') ) highlight_ratings = base.add_params( rating_select ).encode( color=rating_color_condition ).properties(title="Radio Button Highlighting") # Boolean selection for format changes input_checkbox = alt.binding_checkbox(name="Big Budget Films ") checkbox_selection = alt.param(bind=input_checkbox) size_checkbox_condition = alt.condition( checkbox_selection, alt.Size('Hundred_Million_Production:Q'), alt.SizeValue(25) ) budget_sizing = base.add_params( checkbox_selection ).encode( size=size_checkbox_condition ).properties(title="Checkbox Formatting") (filter_year | filter_genres) & (highlight_ratings | budget_sizing)