j1-template 2022.5.0.rc1 → 2022.5.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (378) hide show
  1. checksums.yaml +4 -4
  2. data/assets/data/banner.html +24 -1
  3. data/assets/themes/j1/adapter/js/masterslider.js +22 -5
  4. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +56 -0
  5. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  6. data/lib/j1/version.rb +1 -1
  7. data/lib/starter_web/Gemfile +270 -270
  8. data/lib/starter_web/_config.yml +19 -9
  9. data/lib/starter_web/_data/blocks/banner.yml +17 -0
  10. data/lib/starter_web/_data/modules/defaults/masterslider.yml +1 -1
  11. data/lib/starter_web/_data/modules/justifiedGallery.yml +82 -0
  12. data/lib/starter_web/_data/modules/masterslider.yml +5 -9
  13. data/lib/starter_web/_data/modules/navigator_menu.yml +208 -168
  14. data/lib/starter_web/_includes/attributes.asciidoc +18 -14
  15. data/lib/starter_web/_includes/tables/template_variables.asciidoc +1 -1
  16. data/lib/starter_web/_plugins/asciidoctor-extensions/lightbox-block.rb +4 -4
  17. data/lib/starter_web/assets/images/pages/features/blog-post-navigator-1280x1000.jpg +0 -0
  18. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.png +0 -0
  19. data/lib/starter_web/assets/images/pages/features/clipboard-1280x600.jpg +0 -0
  20. data/lib/starter_web/assets/images/pages/features/comments-1280x600.jpg +0 -0
  21. data/lib/starter_web/assets/images/pages/features/cookie-consent-1280x800.jpg +0 -0
  22. data/lib/starter_web/assets/images/pages/features/desktop-web-navigation-1280x1000.jpg +0 -0
  23. data/lib/starter_web/assets/images/pages/features/example-content-1280x800.jpg +0 -0
  24. data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1280x800.jpg +0 -0
  25. data/lib/starter_web/assets/images/pages/features/fab-1280x500.jpg +0 -0
  26. data/lib/starter_web/assets/images/pages/features/full-text-search-1280x800.jpg +0 -0
  27. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.png +0 -0
  28. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.png +0 -0
  29. data/lib/starter_web/assets/images/pages/features/intro-panel-1280x800.jpg +0 -0
  30. data/lib/starter_web/assets/images/pages/features/master-header-1280x600.jpg +0 -0
  31. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.png +0 -0
  32. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.png +0 -0
  33. data/lib/starter_web/assets/images/pages/features/nav-module-1280x300.jpg +0 -0
  34. data/lib/starter_web/assets/images/pages/features/nbi-barchart-1280x800.jpg +0 -0
  35. data/lib/starter_web/assets/images/pages/features/teaser-banner-1280x600.jpg +0 -0
  36. data/lib/starter_web/assets/images/pages/features/translator-1280x800.jpg +0 -0
  37. data/lib/starter_web/assets/images/sticker/600x600/sticker-new-version.png +0 -0
  38. data/lib/starter_web/assets/images/sticker/scalable/readme +0 -0
  39. data/lib/starter_web/package.json +6 -6
  40. data/lib/starter_web/pages/public/_jupyter/docs/_includes/attributes.asciidoc +67 -0
  41. data/lib/starter_web/pages/public/_jupyter/docs/_includes/documents/j1_docs_example_static.asciidoc +232 -0
  42. data/lib/starter_web/pages/public/_jupyter/docs/binderhub.adoc +631 -0
  43. data/lib/starter_web/pages/public/_jupyter/docs/j1-nbinteract.adoc +638 -0
  44. data/lib/starter_web/pages/public/_jupyter/docs/jupyterhub.adoc +248 -0
  45. data/lib/starter_web/pages/public/_jupyter/docs/nbinteract-widget-manual.adoc +928 -0
  46. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-circular-times-table.adoc +139 -0
  47. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-common-used-widgets.adoc +229 -0
  48. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-odes-in-python.adoc +112 -0
  49. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-altair/j1-altair-visualisations.adoc +142 -0
  50. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bokeh-visualisations.adoc +171 -0
  51. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bqplot-eamples.adoc +111 -0
  52. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-plotly/j1-plotly-visualisations.adoc +94 -0
  53. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1_climate-change-forecast.adoc +106 -0
  54. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16260 -0
  55. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_bgplot_line_plot-checkpoint.ipynb +247 -0
  56. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-Copy1-checkpoint.ipynb +12382 -0
  57. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-checkpoint.ipynb +12387 -0
  58. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-short-checkpoint.ipynb +12170 -0
  59. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_climate_change_forecast-checkpoint.ipynb +1058 -0
  60. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_docs_example_dynamic-checkpoint.ipynb +14478 -0
  61. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-Copy1-checkpoint.ipynb +379 -0
  62. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-checkpoint.ipynb +442 -0
  63. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets-checkpoint.ipynb +523 -0
  64. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.line_charts-checkpoint.ipynb +84 -0
  65. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.questions-checkpoint.ipynb +194 -0
  66. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_chart-checkpoint.ipynb +89 -0
  67. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-Copy1-checkpoint.ipynb +164 -0
  68. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-checkpoint.ipynb +173 -0
  69. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts.1-checkpoint.ipynb +256 -0
  70. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_barcharts-checkpoint.ipynb +126 -0
  71. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_hist_chart-checkpoint.ipynb +87 -0
  72. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_chart-checkpoint.ipynb +90 -0
  73. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_charts-checkpoint.ipynb +87 -0
  74. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_multiple_choice-checkpoint.ipynb +64 -0
  75. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_short_answer-checkpoint.ipynb +122 -0
  76. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_questions-checkpoint.ipynb +181 -0
  77. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_chart-checkpoint.ipynb +89 -0
  78. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_charts-checkpoint.ipynb +175 -0
  79. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_drag_chart-checkpoint.ipynb +87 -0
  80. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_ode_selected-checkpoint.ipynb +14478 -0
  81. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_odes_in_python-checkpoint.ipynb +15227 -0
  82. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/factor_by_factor.mp4 +0 -0
  83. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_circular_times_table.ipynb +12382 -0
  84. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_climate_change_forecast.ipynb +1058 -0
  85. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_docs_example_dynamic.ipynb +14478 -0
  86. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_interactive_widgets.ipynb +442 -0
  87. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets.ipynb +523 -0
  88. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_bar_chart.ipynb +89 -0
  89. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_hist_chart.ipynb +87 -0
  90. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_line_chart.ipynb +90 -0
  91. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_multiple_choice.ipynb +64 -0
  92. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_short_answer.ipynb +122 -0
  93. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_chart.ipynb +89 -0
  94. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_drag_chart.ipynb +87 -0
  95. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_odes_in_python.ipynb +15227 -0
  96. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/line_by_line.mp4 +0 -0
  97. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/point_by_point.mp4 +0 -0
  98. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16296 -0
  99. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_non_interactive-checkpoint.ipynb +15385 -0
  100. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_interactive.ipynb +16296 -0
  101. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_non_interactive.ipynb +15385 -0
  102. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/00 - Introduction and Setup-checkpoint.ipynb +717 -0
  103. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/01 - Basic Plotting-checkpoint.ipynb +1381 -0
  104. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/02 - Styling and Theming-checkpoint.ipynb +1440 -0
  105. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/03 - Data Sources and Transformations-checkpoint.ipynb +927 -0
  106. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/04 - Adding Annotations-checkpoint.ipynb +1105 -0
  107. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/05 - Presentation Layouts-checkpoint.ipynb +578 -0
  108. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/06 - Linking and Interactions-checkpoint.ipynb +1196 -0
  109. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/07 - Bar and Categorical Data Plots-checkpoint.ipynb +1681 -0
  110. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/08 - Graph and Network Plots-checkpoint.ipynb +680 -0
  111. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/09 - Geographic Plots-checkpoint.ipynb +693 -0
  112. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/10 - Exporting and Embedding-checkpoint.ipynb +751 -0
  113. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/11 - Running Bokeh Applications-checkpoint.ipynb +770 -0
  114. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/bokeh_tut_00_introduction_and_setup-checkpoint.ipynb +666 -0
  115. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_01_basic_plotting-checkpoint.ipynb +1365 -0
  116. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_02_styling_and_theming-checkpoint.ipynb +1405 -0
  117. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_03_data_sources_and_transformations-checkpoint.ipynb +856 -0
  118. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_04_adding_annotations-checkpoint.ipynb +1167 -0
  119. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_05_presentation_layouts-checkpoint.ipynb +601 -0
  120. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_06_linking_and_interactions-checkpoint.ipynb +1356 -0
  121. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_07_bar_and_categorical_data_plots-checkpoint.ipynb +1742 -0
  122. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_08_graph_and_network_plots-checkpoint.ipynb +625 -0
  123. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_09_geographic_plots-checkpoint.ipynb +685 -0
  124. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.ipynb +726 -0
  125. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.org +726 -0
  126. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding.new-checkpoint.ipynb +560 -0
  127. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_11_running_bokeh_applications-checkpoint.ipynb +716 -0
  128. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_01_basic_plotting.ipynb +1365 -0
  129. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_02_styling_and_theming.ipynb +1405 -0
  130. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_03_data_sources_and_transformations.ipynb +856 -0
  131. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_04_adding_annotations.ipynb +1167 -0
  132. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_05_presentation_layouts.ipynb +601 -0
  133. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_06_linking_and_interactions.ipynb +1356 -0
  134. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_07_bar_and_categorical_data_plots.ipynb +1742 -0
  135. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_08_graph_and_network_plots.ipynb +625 -0
  136. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_09_geographic_plots.ipynb +685 -0
  137. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/.ipynb_checkpoints/j1_mathplot_vs_bqplot-checkpoint.ipynb +336 -0
  138. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/advanced/Feature_Vector_Distribution-Iris-Digits.ipynb +433 -0
  139. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_bgplot_line_plot.ipynb +244 -0
  140. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_circular_times_table-short.ipynb +12170 -0
  141. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_mathplot_vs_bqplot.ipynb +336 -0
  142. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Index-checkpoint.ipynb +163 -0
  143. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Tutorials-checkpoint.ipynb +51 -0
  144. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Advanced Plotting.ipynb +289 -0
  145. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Animations.ipynb +266 -0
  146. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Axis Properties.ipynb +396 -0
  147. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Plotting Dates.ipynb +318 -0
  148. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/Time Series.ipynb +158 -0
  149. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/spx_prices.csv +6799 -0
  150. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb +470 -0
  151. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Index.ipynb +49 -0
  152. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Logs Analytics/Logs Dashboard.ipynb +378 -0
  153. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Mobile Patent Suits.ipynb +123 -0
  154. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Neural Network.ipynb +177 -0
  155. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Outlier Detection.ipynb +311 -0
  156. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Bubble Chart.ipynb +255 -0
  157. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Choropleth.ipynb +275 -0
  158. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/nations.json +1 -0
  159. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/world_map_codes.csv +234 -0
  160. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Basic Plotting-checkpoint.ipynb +186 -0
  161. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Pyplot-checkpoint.ipynb +794 -0
  162. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Untitled-checkpoint.ipynb +323 -0
  163. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Basic Plotting.ipynb +261 -0
  164. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Pyplot.ipynb +1489 -0
  165. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Index.ipynb +163 -0
  166. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Interaction Layer.ipynb +966 -0
  167. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Mark Interactions.ipynb +476 -0
  168. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Selectors.ipynb +427 -0
  169. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Introduction.ipynb +528 -0
  170. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bars.ipynb +480 -0
  171. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bins.ipynb +217 -0
  172. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Boxplot.ipynb +253 -0
  173. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Candles.ipynb +225 -0
  174. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/FlexLine.ipynb +123 -0
  175. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Graph.ipynb +357 -0
  176. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/GridHeatMap.ipynb +422 -0
  177. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/HeatMap.ipynb +157 -0
  178. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Hist.ipynb +176 -0
  179. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Image.ipynb +195 -0
  180. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Label.ipynb +189 -0
  181. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Lines.ipynb +565 -0
  182. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Map.ipynb +182 -0
  183. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Market Map.ipynb +315 -0
  184. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Pie.ipynb +465 -0
  185. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Scatter.ipynb +835 -0
  186. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bars.ipynb +362 -0
  187. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bins.ipynb +252 -0
  188. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Boxplot.ipynb +273 -0
  189. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Candles.ipynb +242 -0
  190. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/GridHeatMap.ipynb +417 -0
  191. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/HeatMap.ipynb +155 -0
  192. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Hist.ipynb +238 -0
  193. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Image.ipynb +152 -0
  194. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Label.ipynb +206 -0
  195. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Lines.ipynb +474 -0
  196. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Map.ipynb +181 -0
  197. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Pie.ipynb +310 -0
  198. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Scatter.ipynb +702 -0
  199. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Scales/Color Scales.ipynb +495 -0
  200. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Feature_Vector_Distribution-Iris-Digits-checkpoint.ipynb +433 -0
  201. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Linking Plots With Widgets-checkpoint.ipynb +326 -0
  202. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-Copy1-checkpoint.ipynb +177 -0
  203. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-checkpoint.ipynb +177 -0
  204. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Brush Interval Selector.ipynb +154 -0
  205. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Fast Interval Selector.ipynb +152 -0
  206. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density Widget.ipynb +128 -0
  207. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density.ipynb +113 -0
  208. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Linking Plots With Widgets.ipynb +326 -0
  209. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Object Model.ipynb +179 -0
  210. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Pyplot.ipynb +174 -0
  211. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Updating Plots.ipynb +177 -0
  212. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials.ipynb +51 -0
  213. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/country_codes.csv +213 -0
  214. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/gdp_per_capita.csv +56 -0
  215. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/state_codes.csv +52 -0
  216. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/trees.jpg +0 -0
  217. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_central_limit_theorem-checkpoint.ipynb +247 -0
  218. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_variability_of_the_sample_mean-checkpoint.ipynb +323 -0
  219. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_graphing-checkpoint.ipynb +387 -0
  220. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_interactive_questions-checkpoint.ipynb +185 -0
  221. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_layout-checkpoint.ipynb +384 -0
  222. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_interact-checkpoint.ipynb +254 -0
  223. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_monty_hall-checkpoint.ipynb +732 -0
  224. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_central_limit_theorem.ipynb +247 -0
  225. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_correlation.ipynb +651 -0
  226. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_empirical_distributions.ipynb +773 -0
  227. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_linear_regression.ipynb +111 -0
  228. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_probability_distribution_plots.ipynb +199 -0
  229. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_sampling_from_a_population.ipynb +421 -0
  230. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_variability_of_the_sample_mean.ipynb +323 -0
  231. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_graphing.ipynb +387 -0
  232. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_interactive_questions.ipynb +185 -0
  233. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_layout.ipynb +384 -0
  234. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_interact.ipynb +254 -0
  235. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_monty_hall.ipynb +732 -0
  236. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Advanced Plotting.html +373 -0
  237. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Animations.html +361 -0
  238. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Axis Properties.html +569 -0
  239. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bars.html +487 -0
  240. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Basic Plotting.html +341 -0
  241. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bins.html +259 -0
  242. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Boxplot.html +277 -0
  243. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Brush Interval Selector.html +182 -0
  244. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bubble Chart.html +299 -0
  245. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Candles.html +252 -0
  246. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Choropleth.html +318 -0
  247. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Color Scales.html +514 -0
  248. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Fast Interval Selector.html +182 -0
  249. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Feature_Vector_Distribution-Iris-Digits.html +479 -0
  250. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/FlexLine.html +128 -0
  251. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density Widget.html +152 -0
  252. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density.html +137 -0
  253. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Graph.html +484 -0
  254. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/GridHeatMap.html +483 -0
  255. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/HeatMap.html +170 -0
  256. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Hist.html +349 -0
  257. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Image.html +177 -0
  258. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Index.html +29 -0
  259. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Interaction Layer.html +1372 -0
  260. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Introduction.html +749 -0
  261. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Label.html +268 -0
  262. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Lines.html +704 -0
  263. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Linking Plots With Widgets.html +389 -0
  264. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Logs Dashboard.html +455 -0
  265. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Map.html +229 -0
  266. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mark Interactions.html +613 -0
  267. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Market Map.html +413 -0
  268. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mobile Patent Suits.html +131 -0
  269. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Neural Network.html +190 -0
  270. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Object Model.html +193 -0
  271. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Outlier Detection.html +363 -0
  272. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pie.html +367 -0
  273. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Plotting Dates.html +337 -0
  274. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pyplot.html +196 -0
  275. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Scatter.html +948 -0
  276. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Selectors.html +489 -0
  277. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Time Series.html +173 -0
  278. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Tutorials.html +40 -0
  279. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Updating Plots.html +228 -0
  280. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_interactive.html +2216 -0
  281. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_non_interactive.html +1170 -0
  282. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bgplot_line_plot.html +318 -0
  283. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_01_basic_plotting.html +1479 -0
  284. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_02_styling_and_theming.html +1524 -0
  285. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_03_data_sources_and_transformations.html +983 -0
  286. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_04_adding_annotations.html +1280 -0
  287. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_05_presentation_layouts.html +660 -0
  288. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_06_linking_and_interactions.html +1563 -0
  289. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_07_bar_and_categorical_data_plots.html +1888 -0
  290. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_08_graph_and_network_plots.html +689 -0
  291. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_09_geographic_plots.html +767 -0
  292. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table-short.html +475 -0
  293. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table.html +747 -0
  294. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_climate_change_forecast.html +1250 -0
  295. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_docs_example_dynamic.html +186 -0
  296. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -0
  297. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_mathplot_vs_bqplot.html +407 -0
  298. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -0
  299. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -0
  300. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -0
  301. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -0
  302. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -0
  303. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -0
  304. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -0
  305. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -0
  306. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -0
  307. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_central_limit_theorem.html +290 -0
  308. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_correlation.html +818 -0
  309. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_empirical_distributions.html +351 -0
  310. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_linear_regression.html +106 -0
  311. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_probability_distribution_plots.html +228 -0
  312. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_sampling_from_a_population.html +518 -0
  313. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_variability_of_the_sample_mean.html +372 -0
  314. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_graphing.html +473 -0
  315. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_interactive_questions.html +242 -0
  316. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_layout.html +496 -0
  317. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_interact.html +329 -0
  318. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_monty_hall.html +866 -0
  319. data/lib/starter_web/pages/public/_jupyter/where_to_go.adoc +270 -0
  320. data/lib/starter_web/pages/public/features/general.adoc +74 -33
  321. data/lib/starter_web/pages/public/features/template.adoc +159 -68
  322. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -512
  323. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -629
  324. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -95
  325. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -93
  326. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -96
  327. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -70
  328. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -156
  329. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -95
  330. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -93
  331. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -955
  332. data/lib/starter_web/pages/public/learn/_roundtrip/100_present_images.adoc +313 -0
  333. data/lib/starter_web/pages/public/learn/_roundtrip/100_present_videos.adoc +281 -0
  334. data/lib/starter_web/pages/public/learn/_roundtrip/200_typography.adoc +253 -0
  335. data/lib/starter_web/pages/public/learn/_roundtrip/300_icon_fonts.adoc +579 -0
  336. data/lib/starter_web/pages/public/learn/_roundtrip/400_asciidoc_extensions.adoc +718 -0
  337. data/lib/starter_web/pages/public/learn/_roundtrip/410_bs_modals_extentions.adoc +91 -0
  338. data/lib/starter_web/pages/public/learn/_roundtrip/420_responsive_tables_extensions.adoc +420 -0
  339. data/lib/starter_web/pages/public/learn/_roundtrip/500_themes.adoc +250 -0
  340. data/lib/starter_web/pages/public/learn/_roundtrip/600_quicksearch.adoc +425 -0
  341. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/attributes.asciidoc +118 -0
  342. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/100_gistblock.asciidoc +28 -0
  343. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_info.asciidoc +14 -0
  344. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +11 -0
  345. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +11 -0
  346. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_central_success.asciidoc +11 -0
  347. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_left_info.asciidoc +11 -0
  348. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_right_success.asciidoc +11 -0
  349. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +47 -0
  350. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_info.asciidoc +11 -0
  351. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_left_info.asciidoc +11 -0
  352. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_right_success.asciidoc +11 -0
  353. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +337 -0
  354. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +47 -0
  355. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/google-ad.js +130 -0
  356. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +6 -5
  357. data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +1 -2
  358. data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +4 -2
  359. data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +1 -1
  360. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +1 -1
  361. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  362. data/lib/starter_web/utilsrv/package.json +1 -1
  363. metadata +384 -17
  364. data/lib/starter_web/_includes/_attributes.asciidoc +0 -575
  365. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1080x800.jpg +0 -0
  366. data/lib/starter_web/assets/images/pages/features/comments-1080x600.jpg +0 -0
  367. data/lib/starter_web/assets/images/pages/features/cookie-consent-1080x800.jpg +0 -0
  368. data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1080x800.jpg +0 -0
  369. data/lib/starter_web/assets/images/pages/features/fab-1080x500.jpg +0 -0
  370. data/lib/starter_web/assets/images/pages/features/full-text-search-1080x800.jpg +0 -0
  371. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
  372. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
  373. data/lib/starter_web/assets/images/pages/features/intro-panel-1080x800.jpg +0 -0
  374. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
  375. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
  376. data/lib/starter_web/assets/images/pages/features/nav-module-1080x300.jpg +0 -0
  377. data/lib/starter_web/assets/images/pages/features/teaser-banner-1080x600.jpg +0 -0
  378. data/lib/starter_web/assets/images/pages/features/translator-1080x800.jpg +0 -0
@@ -0,0 +1,2216 @@
1
+ <div class="cell text_cell">
2
+ <button class="js-nbinteract-widget">
3
+ Loading widgets...
4
+ </button>
5
+ </div>
6
+
7
+
8
+
9
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
10
+ <div class="text_cell_render border-box-sizing rendered_html">
11
+ <h2 id="Resources">Resources<a class="anchor-link" href="#Resources">&#182;</a></h2>
12
+ </div>
13
+ </div>
14
+ </div>
15
+
16
+
17
+
18
+ <div class="
19
+ cell border-box-sizing code_cell rendered">
20
+ <div class="input">
21
+
22
+ <div class="inner_cell">
23
+ <div class="input_area">
24
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">warnings</span>
25
+ <span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span>
26
+
27
+ <span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
28
+ <span class="kn">import</span> <span class="nn">altair</span> <span class="k">as</span> <span class="nn">alt</span>
29
+ <span class="kn">from</span> <span class="nn">vega_datasets</span> <span class="kn">import</span> <span class="n">data</span>
30
+ </pre></div>
31
+
32
+ </div>
33
+ </div>
34
+ </div>
35
+
36
+ </div>
37
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
38
+ <div class="text_cell_render border-box-sizing rendered_html">
39
+ <h2 id="Interactive-Visualization">Interactive Visualization<a class="anchor-link" href="#Interactive-Visualization">&#182;</a></h2><p>Interactive charts can use one or more of these elements to create rich interactivity between the viewer and the data. Selections in Altair come in a few flavors, and they can be bound to particular charts or sub-charts in your visualization, then referenced in other parts of the visualization. Let’s create a simple chart and then add some selections to it. Here is a simple scatter-plot created from the cars dataset:</p>
40
+
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+
46
+
47
+ <div class="
48
+ cell border-box-sizing code_cell rendered">
49
+ <div class="input">
50
+
51
+ <div class="inner_cell">
52
+ <div class="input_area">
53
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">cars</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">cars</span><span class="o">.</span><span class="n">url</span>
54
+
55
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
56
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
57
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
58
+ <span class="n">color</span><span class="o">=</span><span class="s1">&#39;Origin:N&#39;</span>
59
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
60
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
61
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
62
+ <span class="p">)</span>
63
+ </pre></div>
64
+
65
+ </div>
66
+ </div>
67
+ </div>
68
+
69
+ <div class="output_wrapper">
70
+ <div class="output">
71
+
72
+
73
+ <div class="output_area">
74
+
75
+
76
+
77
+
78
+ <div class="output_html rendered_html output_subarea output_execute_result">
79
+
80
+ <div id="altair-viz-db12a028322746ac80da573f8f9061e8"></div>
81
+ <script type="text/javascript">
82
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
83
+ (function(spec, embedOpt){
84
+ let outputDiv = document.currentScript.previousElementSibling;
85
+ if (outputDiv.id !== "altair-viz-db12a028322746ac80da573f8f9061e8") {
86
+ outputDiv = document.getElementById("altair-viz-db12a028322746ac80da573f8f9061e8");
87
+ }
88
+ const paths = {
89
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
90
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
91
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
92
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
93
+ };
94
+
95
+ function maybeLoadScript(lib, version) {
96
+ var key = `${lib.replace("-", "")}_version`;
97
+ return (VEGA_DEBUG[key] == version) ?
98
+ Promise.resolve(paths[lib]) :
99
+ new Promise(function(resolve, reject) {
100
+ var s = document.createElement('script');
101
+ document.getElementsByTagName("head")[0].appendChild(s);
102
+ s.async = true;
103
+ s.onload = () => {
104
+ VEGA_DEBUG[key] = version;
105
+ return resolve(paths[lib]);
106
+ };
107
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
108
+ s.src = paths[lib];
109
+ });
110
+ }
111
+
112
+ function showError(err) {
113
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
114
+ throw err;
115
+ }
116
+
117
+ function displayChart(vegaEmbed) {
118
+ vegaEmbed(outputDiv, spec, embedOpt)
119
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
120
+ }
121
+
122
+ if(typeof define === "function" && define.amd) {
123
+ requirejs.config({paths});
124
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
125
+ } else {
126
+ maybeLoadScript("vega", "5")
127
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
128
+ .then(() => maybeLoadScript("vega-embed", "6"))
129
+ .catch(showError)
130
+ .then(() => displayChart(vegaEmbed));
131
+ }
132
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "point", "encoding": {"color": {"field": "Origin", "type": "nominal"}, "x": {"field": "Miles_per_Gallon", "type": "quantitative"}, "y": {"field": "Horsepower", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
133
+ </script>
134
+ </div>
135
+
136
+ </div>
137
+
138
+ </div>
139
+ </div>
140
+
141
+ </div>
142
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
143
+ <div class="text_cell_render border-box-sizing rendered_html">
144
+ <p>First we’ll create an interval selection using the selection_interval() function. We can now bind this brush to our chart by setting the selection property. The result below is a chart that allows you to click and drag to create a selection region (the brush), and to move this region once the region is created.</p>
145
+
146
+ </div>
147
+ </div>
148
+ </div>
149
+
150
+
151
+
152
+ <div class="
153
+ cell border-box-sizing code_cell rendered">
154
+ <div class="input">
155
+
156
+ <div class="inner_cell">
157
+ <div class="input_area">
158
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">brush</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">()</span> <span class="c1"># selection of type &quot;interval&quot;</span>
159
+
160
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
161
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
162
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
163
+ <span class="n">color</span><span class="o">=</span><span class="s1">&#39;Origin:N&#39;</span>
164
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
165
+ <span class="n">brush</span>
166
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
167
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
168
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
169
+ <span class="p">)</span>
170
+ </pre></div>
171
+
172
+ </div>
173
+ </div>
174
+ </div>
175
+
176
+ <div class="output_wrapper">
177
+ <div class="output">
178
+
179
+
180
+ <div class="output_area">
181
+
182
+
183
+
184
+
185
+ <div class="output_html rendered_html output_subarea output_execute_result">
186
+
187
+ <div id="altair-viz-1149fcb518b44b2ca4949690b06e4feb"></div>
188
+ <script type="text/javascript">
189
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
190
+ (function(spec, embedOpt){
191
+ let outputDiv = document.currentScript.previousElementSibling;
192
+ if (outputDiv.id !== "altair-viz-1149fcb518b44b2ca4949690b06e4feb") {
193
+ outputDiv = document.getElementById("altair-viz-1149fcb518b44b2ca4949690b06e4feb");
194
+ }
195
+ const paths = {
196
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
197
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
198
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
199
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
200
+ };
201
+
202
+ function maybeLoadScript(lib, version) {
203
+ var key = `${lib.replace("-", "")}_version`;
204
+ return (VEGA_DEBUG[key] == version) ?
205
+ Promise.resolve(paths[lib]) :
206
+ new Promise(function(resolve, reject) {
207
+ var s = document.createElement('script');
208
+ document.getElementsByTagName("head")[0].appendChild(s);
209
+ s.async = true;
210
+ s.onload = () => {
211
+ VEGA_DEBUG[key] = version;
212
+ return resolve(paths[lib]);
213
+ };
214
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
215
+ s.src = paths[lib];
216
+ });
217
+ }
218
+
219
+ function showError(err) {
220
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
221
+ throw err;
222
+ }
223
+
224
+ function displayChart(vegaEmbed) {
225
+ vegaEmbed(outputDiv, spec, embedOpt)
226
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
227
+ }
228
+
229
+ if(typeof define === "function" && define.amd) {
230
+ requirejs.config({paths});
231
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
232
+ } else {
233
+ maybeLoadScript("vega", "5")
234
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
235
+ .then(() => maybeLoadScript("vega-embed", "6"))
236
+ .catch(showError)
237
+ .then(() => displayChart(vegaEmbed));
238
+ }
239
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "point", "encoding": {"color": {"field": "Origin", "type": "nominal"}, "x": {"field": "Miles_per_Gallon", "type": "quantitative"}, "y": {"field": "Horsepower", "type": "quantitative"}}, "height": 400, "selection": {"selector001": {"type": "interval"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
240
+ </script>
241
+ </div>
242
+
243
+ </div>
244
+
245
+ </div>
246
+ </div>
247
+
248
+ </div>
249
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
250
+ <div class="text_cell_render border-box-sizing rendered_html">
251
+ <h3 id="Conditions:-Making-the-chart-respond">Conditions: Making the chart respond<a class="anchor-link" href="#Conditions:-Making-the-chart-respond">&#182;</a></h3><p>This is neat, but the selection doesn’t actually do anything yet. To use this selection, we need to reference it in some way within the chart. Here, we will use the condition() function to create a conditional color encoding: we’ll tie the color to the "Origin" column for points in the selection, and set the color to "lightgray" for points outside the selection:</p>
252
+
253
+ </div>
254
+ </div>
255
+ </div>
256
+
257
+
258
+
259
+ <div class="
260
+ cell border-box-sizing code_cell rendered">
261
+ <div class="input">
262
+
263
+ <div class="inner_cell">
264
+ <div class="input_area">
265
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
266
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
267
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
268
+ <span class="n">color</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span><span class="n">brush</span><span class="p">,</span> <span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;lightgray&#39;</span><span class="p">))</span>
269
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
270
+ <span class="n">brush</span>
271
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
272
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
273
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
274
+ <span class="p">)</span>
275
+ </pre></div>
276
+
277
+ </div>
278
+ </div>
279
+ </div>
280
+
281
+ <div class="output_wrapper">
282
+ <div class="output">
283
+
284
+
285
+ <div class="output_area">
286
+
287
+
288
+
289
+
290
+ <div class="output_html rendered_html output_subarea output_execute_result">
291
+
292
+ <div id="altair-viz-cd659585be6a4874852b143ec4853056"></div>
293
+ <script type="text/javascript">
294
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
295
+ (function(spec, embedOpt){
296
+ let outputDiv = document.currentScript.previousElementSibling;
297
+ if (outputDiv.id !== "altair-viz-cd659585be6a4874852b143ec4853056") {
298
+ outputDiv = document.getElementById("altair-viz-cd659585be6a4874852b143ec4853056");
299
+ }
300
+ const paths = {
301
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
302
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
303
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
304
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
305
+ };
306
+
307
+ function maybeLoadScript(lib, version) {
308
+ var key = `${lib.replace("-", "")}_version`;
309
+ return (VEGA_DEBUG[key] == version) ?
310
+ Promise.resolve(paths[lib]) :
311
+ new Promise(function(resolve, reject) {
312
+ var s = document.createElement('script');
313
+ document.getElementsByTagName("head")[0].appendChild(s);
314
+ s.async = true;
315
+ s.onload = () => {
316
+ VEGA_DEBUG[key] = version;
317
+ return resolve(paths[lib]);
318
+ };
319
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
320
+ s.src = paths[lib];
321
+ });
322
+ }
323
+
324
+ function showError(err) {
325
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
326
+ throw err;
327
+ }
328
+
329
+ function displayChart(vegaEmbed) {
330
+ vegaEmbed(outputDiv, spec, embedOpt)
331
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
332
+ }
333
+
334
+ if(typeof define === "function" && define.amd) {
335
+ requirejs.config({paths});
336
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
337
+ } else {
338
+ maybeLoadScript("vega", "5")
339
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
340
+ .then(() => maybeLoadScript("vega-embed", "6"))
341
+ .catch(showError)
342
+ .then(() => displayChart(vegaEmbed));
343
+ }
344
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "type": "nominal", "selection": "selector001"}, "value": "lightgray"}, "x": {"field": "Miles_per_Gallon", "type": "quantitative"}, "y": {"field": "Horsepower", "type": "quantitative"}}, "height": 400, "selection": {"selector001": {"type": "interval"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
345
+ </script>
346
+ </div>
347
+
348
+ </div>
349
+
350
+ </div>
351
+ </div>
352
+
353
+ </div>
354
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
355
+ <div class="text_cell_render border-box-sizing rendered_html">
356
+ <p>As you can see, with this simple change, the color of the points responds to the selection.</p>
357
+ <p>This approach becomes even more powerful when the selection behavior is tied across multiple views of the data within a compound chart. For example, here we create a chart object using the same code as above, and horizontally concatenate two versions of this chart: one with the x-encoding tied to "Acceleration", and one with the x-encoding tied to "Miles_per_Gallon"</p>
358
+
359
+ </div>
360
+ </div>
361
+ </div>
362
+
363
+
364
+
365
+ <div class="
366
+ cell border-box-sizing code_cell rendered">
367
+ <div class="input">
368
+
369
+ <div class="inner_cell">
370
+ <div class="input_area">
371
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">chart</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
372
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
373
+ <span class="n">color</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span><span class="n">brush</span><span class="p">,</span> <span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;lightgray&#39;</span><span class="p">))</span>
374
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
375
+ <span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
376
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
377
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
378
+ <span class="n">brush</span>
379
+ <span class="p">)</span>
380
+
381
+ <span class="n">chart</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Acceleration:Q&#39;</span><span class="p">)</span> <span class="o">|</span> <span class="n">chart</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">)</span>
382
+ </pre></div>
383
+
384
+ </div>
385
+ </div>
386
+ </div>
387
+
388
+ <div class="output_wrapper">
389
+ <div class="output">
390
+
391
+
392
+ <div class="output_area">
393
+
394
+
395
+
396
+
397
+ <div class="output_html rendered_html output_subarea output_execute_result">
398
+
399
+ <div id="altair-viz-7fe614eb5ffb42dabd890c2c042fe8bc"></div>
400
+ <script type="text/javascript">
401
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
402
+ (function(spec, embedOpt){
403
+ let outputDiv = document.currentScript.previousElementSibling;
404
+ if (outputDiv.id !== "altair-viz-7fe614eb5ffb42dabd890c2c042fe8bc") {
405
+ outputDiv = document.getElementById("altair-viz-7fe614eb5ffb42dabd890c2c042fe8bc");
406
+ }
407
+ const paths = {
408
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
409
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
410
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
411
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
412
+ };
413
+
414
+ function maybeLoadScript(lib, version) {
415
+ var key = `${lib.replace("-", "")}_version`;
416
+ return (VEGA_DEBUG[key] == version) ?
417
+ Promise.resolve(paths[lib]) :
418
+ new Promise(function(resolve, reject) {
419
+ var s = document.createElement('script');
420
+ document.getElementsByTagName("head")[0].appendChild(s);
421
+ s.async = true;
422
+ s.onload = () => {
423
+ VEGA_DEBUG[key] = version;
424
+ return resolve(paths[lib]);
425
+ };
426
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
427
+ s.src = paths[lib];
428
+ });
429
+ }
430
+
431
+ function showError(err) {
432
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
433
+ throw err;
434
+ }
435
+
436
+ function displayChart(vegaEmbed) {
437
+ vegaEmbed(outputDiv, spec, embedOpt)
438
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
439
+ }
440
+
441
+ if(typeof define === "function" && define.amd) {
442
+ requirejs.config({paths});
443
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
444
+ } else {
445
+ maybeLoadScript("vega", "5")
446
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
447
+ .then(() => maybeLoadScript("vega-embed", "6"))
448
+ .catch(showError)
449
+ .then(() => displayChart(vegaEmbed));
450
+ }
451
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "hconcat": [{"mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "type": "nominal", "selection": "selector002"}, "value": "lightgray"}, "x": {"field": "Acceleration", "type": "quantitative"}, "y": {"field": "Horsepower", "type": "quantitative"}}, "height": 400, "selection": {"selector002": {"type": "interval", "encodings": ["x"]}}, "width": 400}, {"mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "type": "nominal", "selection": "selector002"}, "value": "lightgray"}, "x": {"field": "Miles_per_Gallon", "type": "quantitative"}, "y": {"field": "Horsepower", "type": "quantitative"}}, "height": 400, "selection": {"selector002": {"type": "interval", "encodings": ["x"]}}, "width": 400}], "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
452
+ </script>
453
+ </div>
454
+
455
+ </div>
456
+
457
+ </div>
458
+ </div>
459
+
460
+ </div>
461
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
462
+ <div class="text_cell_render border-box-sizing rendered_html">
463
+ <p>Because both copies of the chart reference the same selection object, the renderer ties the selections together across panels, leading to a dynamic display that helps you gain insight into the relationships within the dataset.</p>
464
+ <p>Each selection type has attributes through which its behavior can be customized; for example we might wish for our brush to be tied only to the "x" encoding to emphasize that feature in the data. We can modify the brush definition, and leave the rest of the code unchanged:</p>
465
+
466
+ </div>
467
+ </div>
468
+ </div>
469
+
470
+
471
+
472
+ <div class="
473
+ cell border-box-sizing code_cell rendered">
474
+ <div class="input">
475
+
476
+ <div class="inner_cell">
477
+ <div class="input_area">
478
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">brush</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">(</span><span class="n">encodings</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;x&#39;</span><span class="p">])</span>
479
+
480
+ <span class="n">chart</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
481
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
482
+ <span class="n">color</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span><span class="n">brush</span><span class="p">,</span> <span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;lightgray&#39;</span><span class="p">))</span>
483
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
484
+ <span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
485
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
486
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
487
+ <span class="n">brush</span>
488
+ <span class="p">)</span>
489
+
490
+ <span class="n">chart</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Acceleration:Q&#39;</span><span class="p">)</span> <span class="o">|</span> <span class="n">chart</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">)</span>
491
+ </pre></div>
492
+
493
+ </div>
494
+ </div>
495
+ </div>
496
+
497
+ <div class="output_wrapper">
498
+ <div class="output">
499
+
500
+
501
+ <div class="output_area">
502
+
503
+
504
+
505
+
506
+ <div class="output_html rendered_html output_subarea output_execute_result">
507
+
508
+ <div id="altair-viz-f6033be2fdfa4a1295275ff044b3122f"></div>
509
+ <script type="text/javascript">
510
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
511
+ (function(spec, embedOpt){
512
+ let outputDiv = document.currentScript.previousElementSibling;
513
+ if (outputDiv.id !== "altair-viz-f6033be2fdfa4a1295275ff044b3122f") {
514
+ outputDiv = document.getElementById("altair-viz-f6033be2fdfa4a1295275ff044b3122f");
515
+ }
516
+ const paths = {
517
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
518
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
519
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
520
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
521
+ };
522
+
523
+ function maybeLoadScript(lib, version) {
524
+ var key = `${lib.replace("-", "")}_version`;
525
+ return (VEGA_DEBUG[key] == version) ?
526
+ Promise.resolve(paths[lib]) :
527
+ new Promise(function(resolve, reject) {
528
+ var s = document.createElement('script');
529
+ document.getElementsByTagName("head")[0].appendChild(s);
530
+ s.async = true;
531
+ s.onload = () => {
532
+ VEGA_DEBUG[key] = version;
533
+ return resolve(paths[lib]);
534
+ };
535
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
536
+ s.src = paths[lib];
537
+ });
538
+ }
539
+
540
+ function showError(err) {
541
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
542
+ throw err;
543
+ }
544
+
545
+ function displayChart(vegaEmbed) {
546
+ vegaEmbed(outputDiv, spec, embedOpt)
547
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
548
+ }
549
+
550
+ if(typeof define === "function" && define.amd) {
551
+ requirejs.config({paths});
552
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
553
+ } else {
554
+ maybeLoadScript("vega", "5")
555
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
556
+ .then(() => maybeLoadScript("vega-embed", "6"))
557
+ .catch(showError)
558
+ .then(() => displayChart(vegaEmbed));
559
+ }
560
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "hconcat": [{"mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "type": "nominal", "selection": "selector018"}, "value": "lightgray"}, "x": {"field": "Acceleration", "type": "quantitative"}, "y": {"field": "Horsepower", "type": "quantitative"}}, "height": 400, "selection": {"selector018": {"type": "interval", "encodings": ["x"]}}, "width": 400}, {"mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "type": "nominal", "selection": "selector018"}, "value": "lightgray"}, "x": {"field": "Miles_per_Gallon", "type": "quantitative"}, "y": {"field": "Horsepower", "type": "quantitative"}}, "height": 400, "selection": {"selector018": {"type": "interval", "encodings": ["x"]}}, "width": 400}], "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
561
+ </script>
562
+ </div>
563
+
564
+ </div>
565
+
566
+ </div>
567
+ </div>
568
+
569
+ </div>
570
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
571
+ <div class="text_cell_render border-box-sizing rendered_html">
572
+ <h3 id="Selection-Types:-Interval,-Single,-Multi">Selection Types: Interval, Single, Multi<a class="anchor-link" href="#Selection-Types:-Interval,-Single,-Multi">&#182;</a></h3><p>With this interesting example under our belt, let’s take a more systematic look at some of the types of selections available in Altair. For simplicity, we’ll use a common chart in all the following examples; a simple heat-map based on the cars dataset. For convenience, let’s write a quick Python function that will take a selection object and create a chart with the color of the chart elements linked to this selection:</p>
573
+
574
+ </div>
575
+ </div>
576
+ </div>
577
+
578
+
579
+
580
+ <div class="
581
+ cell border-box-sizing code_cell rendered">
582
+ <div class="input">
583
+
584
+ <div class="inner_cell">
585
+ <div class="input_area">
586
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">make_example</span><span class="p">(</span><span class="n">selector</span><span class="p">):</span>
587
+ <span class="n">cars</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">cars</span><span class="o">.</span><span class="n">url</span>
588
+
589
+ <span class="k">return</span> <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_rect</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
590
+ <span class="n">x</span><span class="o">=</span><span class="s2">&quot;Cylinders:O&quot;</span><span class="p">,</span>
591
+ <span class="n">y</span><span class="o">=</span><span class="s2">&quot;Origin:N&quot;</span><span class="p">,</span>
592
+ <span class="n">color</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span><span class="n">selector</span><span class="p">,</span> <span class="s1">&#39;count()&#39;</span><span class="p">,</span> <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;lightgray&#39;</span><span class="p">))</span>
593
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
594
+ <span class="n">width</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
595
+ <span class="n">height</span><span class="o">=</span><span class="mi">180</span>
596
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
597
+ <span class="n">selector</span>
598
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
599
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
600
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
601
+ <span class="p">)</span>
602
+ </pre></div>
603
+
604
+ </div>
605
+ </div>
606
+ </div>
607
+
608
+ </div>
609
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
610
+ <div class="text_cell_render border-box-sizing rendered_html">
611
+ <h4 id="Interval-Selections">Interval Selections<a class="anchor-link" href="#Interval-Selections">&#182;</a></h4><p>An interval selection allows you to select chart elements by clicking and dragging. You can create such a selection using the selection_interval() function:</p>
612
+
613
+ </div>
614
+ </div>
615
+ </div>
616
+
617
+
618
+
619
+ <div class="
620
+ cell border-box-sizing code_cell rendered">
621
+ <div class="input">
622
+
623
+ <div class="inner_cell">
624
+ <div class="input_area">
625
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">interval</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">()</span>
626
+ <span class="n">make_example</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
627
+ </pre></div>
628
+
629
+ </div>
630
+ </div>
631
+ </div>
632
+
633
+ <div class="output_wrapper">
634
+ <div class="output">
635
+
636
+
637
+ <div class="output_area">
638
+
639
+
640
+
641
+
642
+ <div class="output_html rendered_html output_subarea output_execute_result">
643
+
644
+ <div id="altair-viz-207087ac2a78460d9d89b784f524aadb"></div>
645
+ <script type="text/javascript">
646
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
647
+ (function(spec, embedOpt){
648
+ let outputDiv = document.currentScript.previousElementSibling;
649
+ if (outputDiv.id !== "altair-viz-207087ac2a78460d9d89b784f524aadb") {
650
+ outputDiv = document.getElementById("altair-viz-207087ac2a78460d9d89b784f524aadb");
651
+ }
652
+ const paths = {
653
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
654
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
655
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
656
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
657
+ };
658
+
659
+ function maybeLoadScript(lib, version) {
660
+ var key = `${lib.replace("-", "")}_version`;
661
+ return (VEGA_DEBUG[key] == version) ?
662
+ Promise.resolve(paths[lib]) :
663
+ new Promise(function(resolve, reject) {
664
+ var s = document.createElement('script');
665
+ document.getElementsByTagName("head")[0].appendChild(s);
666
+ s.async = true;
667
+ s.onload = () => {
668
+ VEGA_DEBUG[key] = version;
669
+ return resolve(paths[lib]);
670
+ };
671
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
672
+ s.src = paths[lib];
673
+ });
674
+ }
675
+
676
+ function showError(err) {
677
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
678
+ throw err;
679
+ }
680
+
681
+ function displayChart(vegaEmbed) {
682
+ vegaEmbed(outputDiv, spec, embedOpt)
683
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
684
+ }
685
+
686
+ if(typeof define === "function" && define.amd) {
687
+ requirejs.config({paths});
688
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
689
+ } else {
690
+ maybeLoadScript("vega", "5")
691
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
692
+ .then(() => maybeLoadScript("vega-embed", "6"))
693
+ .catch(showError)
694
+ .then(() => displayChart(vegaEmbed));
695
+ }
696
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "rect", "encoding": {"color": {"condition": {"aggregate": "count", "type": "quantitative", "selection": "selector003"}, "value": "lightgray"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"field": "Origin", "type": "nominal"}}, "height": 400, "selection": {"selector003": {"type": "interval"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
697
+ </script>
698
+ </div>
699
+
700
+ </div>
701
+
702
+ </div>
703
+ </div>
704
+
705
+ </div>
706
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
707
+ <div class="text_cell_render border-box-sizing rendered_html">
708
+ <p>As you click and drag on the plot, you’ll find that your mouse creates a box that can be subsequently moved to change the selection.</p>
709
+ <p>The selection_interval() function takes a few additional arguments; for example we can bind the interval to only the x-axis, and set it such that the empty selection contains none of the points:</p>
710
+
711
+ </div>
712
+ </div>
713
+ </div>
714
+
715
+
716
+
717
+ <div class="
718
+ cell border-box-sizing code_cell rendered">
719
+ <div class="input">
720
+
721
+ <div class="inner_cell">
722
+ <div class="input_area">
723
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">interval_x</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">(</span><span class="n">encodings</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;x&#39;</span><span class="p">],</span> <span class="n">empty</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">)</span>
724
+ <span class="n">make_example</span><span class="p">(</span><span class="n">interval_x</span><span class="p">)</span>
725
+ </pre></div>
726
+
727
+ </div>
728
+ </div>
729
+ </div>
730
+
731
+ <div class="output_wrapper">
732
+ <div class="output">
733
+
734
+
735
+ <div class="output_area">
736
+
737
+
738
+
739
+
740
+ <div class="output_html rendered_html output_subarea output_execute_result">
741
+
742
+ <div id="altair-viz-7bdf8b076f094ca1a361174cb238c6e2"></div>
743
+ <script type="text/javascript">
744
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
745
+ (function(spec, embedOpt){
746
+ let outputDiv = document.currentScript.previousElementSibling;
747
+ if (outputDiv.id !== "altair-viz-7bdf8b076f094ca1a361174cb238c6e2") {
748
+ outputDiv = document.getElementById("altair-viz-7bdf8b076f094ca1a361174cb238c6e2");
749
+ }
750
+ const paths = {
751
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
752
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
753
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
754
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
755
+ };
756
+
757
+ function maybeLoadScript(lib, version) {
758
+ var key = `${lib.replace("-", "")}_version`;
759
+ return (VEGA_DEBUG[key] == version) ?
760
+ Promise.resolve(paths[lib]) :
761
+ new Promise(function(resolve, reject) {
762
+ var s = document.createElement('script');
763
+ document.getElementsByTagName("head")[0].appendChild(s);
764
+ s.async = true;
765
+ s.onload = () => {
766
+ VEGA_DEBUG[key] = version;
767
+ return resolve(paths[lib]);
768
+ };
769
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
770
+ s.src = paths[lib];
771
+ });
772
+ }
773
+
774
+ function showError(err) {
775
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
776
+ throw err;
777
+ }
778
+
779
+ function displayChart(vegaEmbed) {
780
+ vegaEmbed(outputDiv, spec, embedOpt)
781
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
782
+ }
783
+
784
+ if(typeof define === "function" && define.amd) {
785
+ requirejs.config({paths});
786
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
787
+ } else {
788
+ maybeLoadScript("vega", "5")
789
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
790
+ .then(() => maybeLoadScript("vega-embed", "6"))
791
+ .catch(showError)
792
+ .then(() => displayChart(vegaEmbed));
793
+ }
794
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "rect", "encoding": {"color": {"condition": {"aggregate": "count", "type": "quantitative", "selection": "selector004"}, "value": "lightgray"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"field": "Origin", "type": "nominal"}}, "height": 400, "selection": {"selector004": {"type": "interval", "encodings": ["x"], "empty": "none"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
795
+ </script>
796
+ </div>
797
+
798
+ </div>
799
+
800
+ </div>
801
+ </div>
802
+
803
+ </div>
804
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
805
+ <div class="text_cell_render border-box-sizing rendered_html">
806
+ <p>A special case of an interval selection is when the interval is bound to the chart scales; this is how Altair plots can be made interactive:</p>
807
+
808
+ </div>
809
+ </div>
810
+ </div>
811
+
812
+
813
+
814
+ <div class="
815
+ cell border-box-sizing code_cell rendered">
816
+ <div class="input">
817
+
818
+ <div class="inner_cell">
819
+ <div class="input_area">
820
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">scales</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">(</span><span class="n">bind</span><span class="o">=</span><span class="s1">&#39;scales&#39;</span><span class="p">)</span>
821
+
822
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
823
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
824
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
825
+ <span class="n">color</span><span class="o">=</span><span class="s1">&#39;Origin:N&#39;</span>
826
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
827
+ <span class="n">scales</span>
828
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
829
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
830
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
831
+ <span class="p">)</span>
832
+ </pre></div>
833
+
834
+ </div>
835
+ </div>
836
+ </div>
837
+
838
+ <div class="output_wrapper">
839
+ <div class="output">
840
+
841
+
842
+ <div class="output_area">
843
+
844
+
845
+
846
+
847
+ <div class="output_html rendered_html output_subarea output_execute_result">
848
+
849
+ <div id="altair-viz-be80c441bc3e427cace05dd5042c9a91"></div>
850
+ <script type="text/javascript">
851
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
852
+ (function(spec, embedOpt){
853
+ let outputDiv = document.currentScript.previousElementSibling;
854
+ if (outputDiv.id !== "altair-viz-be80c441bc3e427cace05dd5042c9a91") {
855
+ outputDiv = document.getElementById("altair-viz-be80c441bc3e427cace05dd5042c9a91");
856
+ }
857
+ const paths = {
858
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
859
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
860
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
861
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
862
+ };
863
+
864
+ function maybeLoadScript(lib, version) {
865
+ var key = `${lib.replace("-", "")}_version`;
866
+ return (VEGA_DEBUG[key] == version) ?
867
+ Promise.resolve(paths[lib]) :
868
+ new Promise(function(resolve, reject) {
869
+ var s = document.createElement('script');
870
+ document.getElementsByTagName("head")[0].appendChild(s);
871
+ s.async = true;
872
+ s.onload = () => {
873
+ VEGA_DEBUG[key] = version;
874
+ return resolve(paths[lib]);
875
+ };
876
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
877
+ s.src = paths[lib];
878
+ });
879
+ }
880
+
881
+ function showError(err) {
882
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
883
+ throw err;
884
+ }
885
+
886
+ function displayChart(vegaEmbed) {
887
+ vegaEmbed(outputDiv, spec, embedOpt)
888
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
889
+ }
890
+
891
+ if(typeof define === "function" && define.amd) {
892
+ requirejs.config({paths});
893
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
894
+ } else {
895
+ maybeLoadScript("vega", "5")
896
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
897
+ .then(() => maybeLoadScript("vega-embed", "6"))
898
+ .catch(showError)
899
+ .then(() => displayChart(vegaEmbed));
900
+ }
901
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "point", "encoding": {"color": {"field": "Origin", "type": "nominal"}, "x": {"field": "Horsepower", "type": "quantitative"}, "y": {"field": "Miles_per_Gallon", "type": "quantitative"}}, "height": 400, "selection": {"selector005": {"type": "interval", "bind": "scales"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
902
+ </script>
903
+ </div>
904
+
905
+ </div>
906
+
907
+ </div>
908
+ </div>
909
+
910
+ </div>
911
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
912
+ <div class="text_cell_render border-box-sizing rendered_html">
913
+ <p>Because this is such a common pattern, Altair provides the Chart.interactive()
914
+ method which creates such a selection more concisely.</p>
915
+
916
+ </div>
917
+ </div>
918
+ </div>
919
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
920
+ <div class="text_cell_render border-box-sizing rendered_html">
921
+ <h4 id="Single-Selections">Single Selections<a class="anchor-link" href="#Single-Selections">&#182;</a></h4><p>A single selection allows you to select a single chart element at a time using mouse actions. By default, points are selected on <strong>click</strong>:</p>
922
+
923
+ </div>
924
+ </div>
925
+ </div>
926
+
927
+
928
+
929
+ <div class="
930
+ cell border-box-sizing code_cell rendered">
931
+ <div class="input">
932
+
933
+ <div class="inner_cell">
934
+ <div class="input_area">
935
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">single</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_single</span><span class="p">()</span>
936
+ <span class="n">make_example</span><span class="p">(</span><span class="n">single</span><span class="p">)</span>
937
+ </pre></div>
938
+
939
+ </div>
940
+ </div>
941
+ </div>
942
+
943
+ <div class="output_wrapper">
944
+ <div class="output">
945
+
946
+
947
+ <div class="output_area">
948
+
949
+
950
+
951
+
952
+ <div class="output_html rendered_html output_subarea output_execute_result">
953
+
954
+ <div id="altair-viz-59d28042c3774bacad1c4574bd3ea6e3"></div>
955
+ <script type="text/javascript">
956
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
957
+ (function(spec, embedOpt){
958
+ let outputDiv = document.currentScript.previousElementSibling;
959
+ if (outputDiv.id !== "altair-viz-59d28042c3774bacad1c4574bd3ea6e3") {
960
+ outputDiv = document.getElementById("altair-viz-59d28042c3774bacad1c4574bd3ea6e3");
961
+ }
962
+ const paths = {
963
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
964
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
965
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
966
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
967
+ };
968
+
969
+ function maybeLoadScript(lib, version) {
970
+ var key = `${lib.replace("-", "")}_version`;
971
+ return (VEGA_DEBUG[key] == version) ?
972
+ Promise.resolve(paths[lib]) :
973
+ new Promise(function(resolve, reject) {
974
+ var s = document.createElement('script');
975
+ document.getElementsByTagName("head")[0].appendChild(s);
976
+ s.async = true;
977
+ s.onload = () => {
978
+ VEGA_DEBUG[key] = version;
979
+ return resolve(paths[lib]);
980
+ };
981
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
982
+ s.src = paths[lib];
983
+ });
984
+ }
985
+
986
+ function showError(err) {
987
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
988
+ throw err;
989
+ }
990
+
991
+ function displayChart(vegaEmbed) {
992
+ vegaEmbed(outputDiv, spec, embedOpt)
993
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
994
+ }
995
+
996
+ if(typeof define === "function" && define.amd) {
997
+ requirejs.config({paths});
998
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
999
+ } else {
1000
+ maybeLoadScript("vega", "5")
1001
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1002
+ .then(() => maybeLoadScript("vega-embed", "6"))
1003
+ .catch(showError)
1004
+ .then(() => displayChart(vegaEmbed));
1005
+ }
1006
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "rect", "encoding": {"color": {"condition": {"aggregate": "count", "type": "quantitative", "selection": "selector006"}, "value": "lightgray"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"field": "Origin", "type": "nominal"}}, "height": 400, "selection": {"selector006": {"type": "single"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1007
+ </script>
1008
+ </div>
1009
+
1010
+ </div>
1011
+
1012
+ </div>
1013
+ </div>
1014
+
1015
+ </div>
1016
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1017
+ <div class="text_cell_render border-box-sizing rendered_html">
1018
+ <p>By changing some arguments, we can select points on <strong>mouseover</strong> rather than on click. We can also set the nearest flag to True so that the nearest point is highlighted:</p>
1019
+
1020
+ </div>
1021
+ </div>
1022
+ </div>
1023
+
1024
+
1025
+
1026
+ <div class="
1027
+ cell border-box-sizing code_cell rendered">
1028
+ <div class="input">
1029
+
1030
+ <div class="inner_cell">
1031
+ <div class="input_area">
1032
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">single_nearest</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_single</span><span class="p">(</span><span class="n">on</span><span class="o">=</span><span class="s1">&#39;mouseover&#39;</span><span class="p">,</span> <span class="n">nearest</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
1033
+ <span class="n">make_example</span><span class="p">(</span><span class="n">single_nearest</span><span class="p">)</span>
1034
+ </pre></div>
1035
+
1036
+ </div>
1037
+ </div>
1038
+ </div>
1039
+
1040
+ <div class="output_wrapper">
1041
+ <div class="output">
1042
+
1043
+
1044
+ <div class="output_area">
1045
+
1046
+
1047
+
1048
+
1049
+ <div class="output_html rendered_html output_subarea output_execute_result">
1050
+
1051
+ <div id="altair-viz-c837e04012af483083665ab312401b3a"></div>
1052
+ <script type="text/javascript">
1053
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1054
+ (function(spec, embedOpt){
1055
+ let outputDiv = document.currentScript.previousElementSibling;
1056
+ if (outputDiv.id !== "altair-viz-c837e04012af483083665ab312401b3a") {
1057
+ outputDiv = document.getElementById("altair-viz-c837e04012af483083665ab312401b3a");
1058
+ }
1059
+ const paths = {
1060
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1061
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1062
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1063
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1064
+ };
1065
+
1066
+ function maybeLoadScript(lib, version) {
1067
+ var key = `${lib.replace("-", "")}_version`;
1068
+ return (VEGA_DEBUG[key] == version) ?
1069
+ Promise.resolve(paths[lib]) :
1070
+ new Promise(function(resolve, reject) {
1071
+ var s = document.createElement('script');
1072
+ document.getElementsByTagName("head")[0].appendChild(s);
1073
+ s.async = true;
1074
+ s.onload = () => {
1075
+ VEGA_DEBUG[key] = version;
1076
+ return resolve(paths[lib]);
1077
+ };
1078
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1079
+ s.src = paths[lib];
1080
+ });
1081
+ }
1082
+
1083
+ function showError(err) {
1084
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1085
+ throw err;
1086
+ }
1087
+
1088
+ function displayChart(vegaEmbed) {
1089
+ vegaEmbed(outputDiv, spec, embedOpt)
1090
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1091
+ }
1092
+
1093
+ if(typeof define === "function" && define.amd) {
1094
+ requirejs.config({paths});
1095
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1096
+ } else {
1097
+ maybeLoadScript("vega", "5")
1098
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1099
+ .then(() => maybeLoadScript("vega-embed", "6"))
1100
+ .catch(showError)
1101
+ .then(() => displayChart(vegaEmbed));
1102
+ }
1103
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "rect", "encoding": {"color": {"condition": {"aggregate": "count", "type": "quantitative", "selection": "selector007"}, "value": "lightgray"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"field": "Origin", "type": "nominal"}}, "height": 400, "selection": {"selector007": {"type": "single", "on": "mouseover", "nearest": true}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1104
+ </script>
1105
+ </div>
1106
+
1107
+ </div>
1108
+
1109
+ </div>
1110
+ </div>
1111
+
1112
+ </div>
1113
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1114
+ <div class="text_cell_render border-box-sizing rendered_html">
1115
+ <h4 id="Multiple-Selections">Multiple Selections<a class="anchor-link" href="#Multiple-Selections">&#182;</a></h4><p>A multi selection is similar to a single selection, but it allows for multiple chart objects to be selected at once. By default, chart elements can be added to and removed from the selection by clicking on them while holding the <strong>shift</strong> key:</p>
1116
+
1117
+ </div>
1118
+ </div>
1119
+ </div>
1120
+
1121
+
1122
+
1123
+ <div class="
1124
+ cell border-box-sizing code_cell rendered">
1125
+ <div class="input">
1126
+
1127
+ <div class="inner_cell">
1128
+ <div class="input_area">
1129
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">multi</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_multi</span><span class="p">()</span>
1130
+ <span class="n">make_example</span><span class="p">(</span><span class="n">multi</span><span class="p">)</span>
1131
+ </pre></div>
1132
+
1133
+ </div>
1134
+ </div>
1135
+ </div>
1136
+
1137
+ <div class="output_wrapper">
1138
+ <div class="output">
1139
+
1140
+
1141
+ <div class="output_area">
1142
+
1143
+
1144
+
1145
+
1146
+ <div class="output_html rendered_html output_subarea output_execute_result">
1147
+
1148
+ <div id="altair-viz-c75579a6dad74d098011429624c91bfa"></div>
1149
+ <script type="text/javascript">
1150
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1151
+ (function(spec, embedOpt){
1152
+ let outputDiv = document.currentScript.previousElementSibling;
1153
+ if (outputDiv.id !== "altair-viz-c75579a6dad74d098011429624c91bfa") {
1154
+ outputDiv = document.getElementById("altair-viz-c75579a6dad74d098011429624c91bfa");
1155
+ }
1156
+ const paths = {
1157
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1158
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1159
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1160
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1161
+ };
1162
+
1163
+ function maybeLoadScript(lib, version) {
1164
+ var key = `${lib.replace("-", "")}_version`;
1165
+ return (VEGA_DEBUG[key] == version) ?
1166
+ Promise.resolve(paths[lib]) :
1167
+ new Promise(function(resolve, reject) {
1168
+ var s = document.createElement('script');
1169
+ document.getElementsByTagName("head")[0].appendChild(s);
1170
+ s.async = true;
1171
+ s.onload = () => {
1172
+ VEGA_DEBUG[key] = version;
1173
+ return resolve(paths[lib]);
1174
+ };
1175
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1176
+ s.src = paths[lib];
1177
+ });
1178
+ }
1179
+
1180
+ function showError(err) {
1181
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1182
+ throw err;
1183
+ }
1184
+
1185
+ function displayChart(vegaEmbed) {
1186
+ vegaEmbed(outputDiv, spec, embedOpt)
1187
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1188
+ }
1189
+
1190
+ if(typeof define === "function" && define.amd) {
1191
+ requirejs.config({paths});
1192
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1193
+ } else {
1194
+ maybeLoadScript("vega", "5")
1195
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1196
+ .then(() => maybeLoadScript("vega-embed", "6"))
1197
+ .catch(showError)
1198
+ .then(() => displayChart(vegaEmbed));
1199
+ }
1200
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "rect", "encoding": {"color": {"condition": {"aggregate": "count", "type": "quantitative", "selection": "selector008"}, "value": "lightgray"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"field": "Origin", "type": "nominal"}}, "height": 400, "selection": {"selector008": {"type": "multi"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1201
+ </script>
1202
+ </div>
1203
+
1204
+ </div>
1205
+
1206
+ </div>
1207
+ </div>
1208
+
1209
+ </div>
1210
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1211
+ <div class="text_cell_render border-box-sizing rendered_html">
1212
+ <p>In addition to the options seen in selection_single(), the multi selection accepts the <strong>toggle</strong> parameter, which controls whether points can be removed from the selection once they are added.</p>
1213
+ <p>For example, here is a plot where you can “paint” the chart objects by hovering over them with your mouse:</p>
1214
+
1215
+ </div>
1216
+ </div>
1217
+ </div>
1218
+
1219
+
1220
+
1221
+ <div class="
1222
+ cell border-box-sizing code_cell rendered">
1223
+ <div class="input">
1224
+
1225
+ <div class="inner_cell">
1226
+ <div class="input_area">
1227
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">multi_mouseover</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_multi</span><span class="p">(</span><span class="n">on</span><span class="o">=</span><span class="s1">&#39;mouseover&#39;</span><span class="p">,</span> <span class="n">toggle</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">empty</span><span class="o">=</span><span class="s1">&#39;none&#39;</span><span class="p">)</span>
1228
+ <span class="n">make_example</span><span class="p">(</span><span class="n">multi_mouseover</span><span class="p">)</span>
1229
+ </pre></div>
1230
+
1231
+ </div>
1232
+ </div>
1233
+ </div>
1234
+
1235
+ <div class="output_wrapper">
1236
+ <div class="output">
1237
+
1238
+
1239
+ <div class="output_area">
1240
+
1241
+
1242
+
1243
+
1244
+ <div class="output_html rendered_html output_subarea output_execute_result">
1245
+
1246
+ <div id="altair-viz-08f0ce09bf0149338cc8baab1a2e80e3"></div>
1247
+ <script type="text/javascript">
1248
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1249
+ (function(spec, embedOpt){
1250
+ let outputDiv = document.currentScript.previousElementSibling;
1251
+ if (outputDiv.id !== "altair-viz-08f0ce09bf0149338cc8baab1a2e80e3") {
1252
+ outputDiv = document.getElementById("altair-viz-08f0ce09bf0149338cc8baab1a2e80e3");
1253
+ }
1254
+ const paths = {
1255
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1256
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1257
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1258
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1259
+ };
1260
+
1261
+ function maybeLoadScript(lib, version) {
1262
+ var key = `${lib.replace("-", "")}_version`;
1263
+ return (VEGA_DEBUG[key] == version) ?
1264
+ Promise.resolve(paths[lib]) :
1265
+ new Promise(function(resolve, reject) {
1266
+ var s = document.createElement('script');
1267
+ document.getElementsByTagName("head")[0].appendChild(s);
1268
+ s.async = true;
1269
+ s.onload = () => {
1270
+ VEGA_DEBUG[key] = version;
1271
+ return resolve(paths[lib]);
1272
+ };
1273
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1274
+ s.src = paths[lib];
1275
+ });
1276
+ }
1277
+
1278
+ function showError(err) {
1279
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1280
+ throw err;
1281
+ }
1282
+
1283
+ function displayChart(vegaEmbed) {
1284
+ vegaEmbed(outputDiv, spec, embedOpt)
1285
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1286
+ }
1287
+
1288
+ if(typeof define === "function" && define.amd) {
1289
+ requirejs.config({paths});
1290
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1291
+ } else {
1292
+ maybeLoadScript("vega", "5")
1293
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1294
+ .then(() => maybeLoadScript("vega-embed", "6"))
1295
+ .catch(showError)
1296
+ .then(() => displayChart(vegaEmbed));
1297
+ }
1298
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "rect", "encoding": {"color": {"condition": {"aggregate": "count", "type": "quantitative", "selection": "selector009"}, "value": "lightgray"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"field": "Origin", "type": "nominal"}}, "height": 400, "selection": {"selector009": {"type": "multi", "on": "mouseover", "toggle": false, "empty": "none"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1299
+ </script>
1300
+ </div>
1301
+
1302
+ </div>
1303
+
1304
+ </div>
1305
+ </div>
1306
+
1307
+ </div>
1308
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1309
+ <div class="text_cell_render border-box-sizing rendered_html">
1310
+ <h4 id="Composing-Multiple-Selections">Composing Multiple Selections<a class="anchor-link" href="#Composing-Multiple-Selections">&#182;</a></h4><p>Altair also supports combining multiple selections using the &amp;, | and ~ for respectively AND, OR and NOT logical composition operands.</p>
1311
+ <p>In the following example there are two people who can make an interval selection in the chart. The person Alex makes a selection box when the alt-key (macOS: option-key) is selected and Morgan can make a selection box when the shift-key is selected. We use the alt.Brushconfig() to give the selection box of Morgan a different style. Now, we color the rectangles when they fall within Alex’s or Morgan’s selection.</p>
1312
+
1313
+ </div>
1314
+ </div>
1315
+ </div>
1316
+
1317
+
1318
+
1319
+ <div class="
1320
+ cell border-box-sizing code_cell rendered">
1321
+ <div class="input">
1322
+
1323
+ <div class="inner_cell">
1324
+ <div class="input_area">
1325
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alex</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">(</span>
1326
+ <span class="n">on</span><span class="o">=</span><span class="s2">&quot;[mousedown[event.altKey], mouseup] &gt; mousemove&quot;</span><span class="p">,</span>
1327
+ <span class="n">name</span><span class="o">=</span><span class="s1">&#39;alex&#39;</span>
1328
+ <span class="p">)</span>
1329
+
1330
+ <span class="n">morgan</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">(</span>
1331
+ <span class="n">on</span><span class="o">=</span><span class="s2">&quot;[mousedown[event.shiftKey], mouseup] &gt; mousemove&quot;</span><span class="p">,</span>
1332
+ <span class="n">mark</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BrushConfig</span><span class="p">(</span><span class="n">fill</span><span class="o">=</span><span class="s2">&quot;#fdbb84&quot;</span><span class="p">,</span> <span class="n">fillOpacity</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">stroke</span><span class="o">=</span><span class="s2">&quot;#e34a33&quot;</span><span class="p">),</span>
1333
+ <span class="n">name</span><span class="o">=</span><span class="s1">&#39;morgan&#39;</span>
1334
+ <span class="p">)</span>
1335
+
1336
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_rect</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1337
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Cylinders:O&#39;</span><span class="p">,</span>
1338
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Origin:O&#39;</span><span class="p">,</span>
1339
+ <span class="n">color</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span><span class="n">alex</span> <span class="o">|</span> <span class="n">morgan</span><span class="p">,</span> <span class="s1">&#39;count()&#39;</span><span class="p">,</span> <span class="n">alt</span><span class="o">.</span><span class="n">ColorValue</span><span class="p">(</span><span class="s2">&quot;grey&quot;</span><span class="p">))</span>
1340
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
1341
+ <span class="n">alex</span><span class="p">,</span> <span class="n">morgan</span>
1342
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
1343
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
1344
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
1345
+ <span class="p">)</span>
1346
+ </pre></div>
1347
+
1348
+ </div>
1349
+ </div>
1350
+ </div>
1351
+
1352
+ <div class="output_wrapper">
1353
+ <div class="output">
1354
+
1355
+
1356
+ <div class="output_area">
1357
+
1358
+
1359
+
1360
+
1361
+ <div class="output_html rendered_html output_subarea output_execute_result">
1362
+
1363
+ <div id="altair-viz-3ad8ba24e5c847c89a2d0bf1fccca0d7"></div>
1364
+ <script type="text/javascript">
1365
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1366
+ (function(spec, embedOpt){
1367
+ let outputDiv = document.currentScript.previousElementSibling;
1368
+ if (outputDiv.id !== "altair-viz-3ad8ba24e5c847c89a2d0bf1fccca0d7") {
1369
+ outputDiv = document.getElementById("altair-viz-3ad8ba24e5c847c89a2d0bf1fccca0d7");
1370
+ }
1371
+ const paths = {
1372
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1373
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1374
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1375
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1376
+ };
1377
+
1378
+ function maybeLoadScript(lib, version) {
1379
+ var key = `${lib.replace("-", "")}_version`;
1380
+ return (VEGA_DEBUG[key] == version) ?
1381
+ Promise.resolve(paths[lib]) :
1382
+ new Promise(function(resolve, reject) {
1383
+ var s = document.createElement('script');
1384
+ document.getElementsByTagName("head")[0].appendChild(s);
1385
+ s.async = true;
1386
+ s.onload = () => {
1387
+ VEGA_DEBUG[key] = version;
1388
+ return resolve(paths[lib]);
1389
+ };
1390
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1391
+ s.src = paths[lib];
1392
+ });
1393
+ }
1394
+
1395
+ function showError(err) {
1396
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1397
+ throw err;
1398
+ }
1399
+
1400
+ function displayChart(vegaEmbed) {
1401
+ vegaEmbed(outputDiv, spec, embedOpt)
1402
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1403
+ }
1404
+
1405
+ if(typeof define === "function" && define.amd) {
1406
+ requirejs.config({paths});
1407
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1408
+ } else {
1409
+ maybeLoadScript("vega", "5")
1410
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1411
+ .then(() => maybeLoadScript("vega-embed", "6"))
1412
+ .catch(showError)
1413
+ .then(() => displayChart(vegaEmbed));
1414
+ }
1415
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "rect", "encoding": {"color": {"condition": {"aggregate": "count", "type": "quantitative", "selection": {"or": ["alex", "morgan"]}}, "value": "grey"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"field": "Origin", "type": "ordinal"}}, "height": 400, "selection": {"alex": {"type": "interval", "on": "[mousedown[event.altKey], mouseup] > mousemove"}, "morgan": {"type": "interval", "on": "[mousedown[event.shiftKey], mouseup] > mousemove", "mark": {"fill": "#fdbb84", "fillOpacity": 0.5, "stroke": "#e34a33"}}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1416
+ </script>
1417
+ </div>
1418
+
1419
+ </div>
1420
+
1421
+ </div>
1422
+ </div>
1423
+
1424
+ </div>
1425
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1426
+ <div class="text_cell_render border-box-sizing rendered_html">
1427
+ <p>With these operators, selections can be combined in arbitrary ways:</p>
1428
+ <ul>
1429
+ <li><p>~(alex &amp; morgan): to select the rectangles that fall outside Alex’s and Morgan’s selections.</p>
1430
+ </li>
1431
+ <li><p>alex | ~morgan: to select the rectangles that fall within Alex’s selection or outside the selection of Morgan</p>
1432
+ </li>
1433
+ </ul>
1434
+
1435
+ </div>
1436
+ </div>
1437
+ </div>
1438
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1439
+ <div class="text_cell_render border-box-sizing rendered_html">
1440
+ <h4 id="Selection-Targets:-Fields-and-Encodings">Selection Targets: Fields and Encodings<a class="anchor-link" href="#Selection-Targets:-Fields-and-Encodings">&#182;</a></h4><p>For any but the simplest selections, the user needs to think about exactly what is targeted by the selection, and this can be controlled with either the fields or encodings arguments. These control what data properties are used to determine which points are part of the selection.</p>
1441
+ <p>For example, here we create a small chart that acts as an interactive legend, by targeting the Origin field using fields=['Origin']. Clicking on points in the upper-right plot (the legend) will propagate a selection for all points with a matching Origin.</p>
1442
+
1443
+ </div>
1444
+ </div>
1445
+ </div>
1446
+
1447
+
1448
+
1449
+ <div class="
1450
+ cell border-box-sizing code_cell rendered">
1451
+ <div class="input">
1452
+
1453
+ <div class="inner_cell">
1454
+ <div class="input_area">
1455
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">selection</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_multi</span><span class="p">(</span><span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;Origin&#39;</span><span class="p">])</span>
1456
+
1457
+ <span class="n">color</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span>
1458
+ <span class="n">selection</span><span class="p">,</span>
1459
+ <span class="n">alt</span><span class="o">.</span><span class="n">Color</span><span class="p">(</span><span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">legend</span><span class="o">=</span><span class="kc">None</span><span class="p">),</span>
1460
+ <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;lightgray&#39;</span><span class="p">)</span>
1461
+ <span class="p">)</span>
1462
+
1463
+ <span class="n">scatter</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1464
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
1465
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
1466
+ <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">,</span>
1467
+ <span class="n">tooltip</span><span class="o">=</span><span class="s1">&#39;Name:N&#39;</span>
1468
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
1469
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
1470
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
1471
+ <span class="p">)</span>
1472
+
1473
+ <span class="n">legend</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1474
+ <span class="n">y</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">Axis</span><span class="p">(</span><span class="n">orient</span><span class="o">=</span><span class="s1">&#39;right&#39;</span><span class="p">)),</span>
1475
+ <span class="n">color</span><span class="o">=</span><span class="n">color</span>
1476
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
1477
+ <span class="n">selection</span>
1478
+ <span class="p">)</span>
1479
+
1480
+ <span class="n">scatter</span> <span class="o">|</span> <span class="n">legend</span>
1481
+ </pre></div>
1482
+
1483
+ </div>
1484
+ </div>
1485
+ </div>
1486
+
1487
+ <div class="output_wrapper">
1488
+ <div class="output">
1489
+
1490
+
1491
+ <div class="output_area">
1492
+
1493
+
1494
+
1495
+
1496
+ <div class="output_html rendered_html output_subarea output_execute_result">
1497
+
1498
+ <div id="altair-viz-a5af03e3f1414ce2af09e65aa4b017b6"></div>
1499
+ <script type="text/javascript">
1500
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1501
+ (function(spec, embedOpt){
1502
+ let outputDiv = document.currentScript.previousElementSibling;
1503
+ if (outputDiv.id !== "altair-viz-a5af03e3f1414ce2af09e65aa4b017b6") {
1504
+ outputDiv = document.getElementById("altair-viz-a5af03e3f1414ce2af09e65aa4b017b6");
1505
+ }
1506
+ const paths = {
1507
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1508
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1509
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1510
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1511
+ };
1512
+
1513
+ function maybeLoadScript(lib, version) {
1514
+ var key = `${lib.replace("-", "")}_version`;
1515
+ return (VEGA_DEBUG[key] == version) ?
1516
+ Promise.resolve(paths[lib]) :
1517
+ new Promise(function(resolve, reject) {
1518
+ var s = document.createElement('script');
1519
+ document.getElementsByTagName("head")[0].appendChild(s);
1520
+ s.async = true;
1521
+ s.onload = () => {
1522
+ VEGA_DEBUG[key] = version;
1523
+ return resolve(paths[lib]);
1524
+ };
1525
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1526
+ s.src = paths[lib];
1527
+ });
1528
+ }
1529
+
1530
+ function showError(err) {
1531
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1532
+ throw err;
1533
+ }
1534
+
1535
+ function displayChart(vegaEmbed) {
1536
+ vegaEmbed(outputDiv, spec, embedOpt)
1537
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1538
+ }
1539
+
1540
+ if(typeof define === "function" && define.amd) {
1541
+ requirejs.config({paths});
1542
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1543
+ } else {
1544
+ maybeLoadScript("vega", "5")
1545
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1546
+ .then(() => maybeLoadScript("vega-embed", "6"))
1547
+ .catch(showError)
1548
+ .then(() => displayChart(vegaEmbed));
1549
+ }
1550
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "hconcat": [{"mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "legend": null, "type": "nominal", "selection": "selector016"}, "value": "lightgray"}, "tooltip": {"field": "Name", "type": "nominal"}, "x": {"field": "Horsepower", "type": "quantitative"}, "y": {"field": "Miles_per_Gallon", "type": "quantitative"}}, "height": 400, "width": 800}, {"mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "legend": null, "type": "nominal", "selection": "selector016"}, "value": "lightgray"}, "y": {"axis": {"orient": "right"}, "field": "Origin", "type": "nominal"}}, "selection": {"selector016": {"type": "multi", "fields": ["Origin"]}}}], "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1551
+ </script>
1552
+ </div>
1553
+
1554
+ </div>
1555
+
1556
+ </div>
1557
+ </div>
1558
+
1559
+ </div>
1560
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1561
+ <div class="text_cell_render border-box-sizing rendered_html">
1562
+ <p>The above could be equivalently replace fields=['Origin'] with encodings=['color'], because in this case the chart maps color to 'Origin'.</p>
1563
+ <p>Similarly, we can specify multiple fields and/or encodings that must be matched in order for a datum to be included in a selection. For example, we could modify the above chart to create a two-dimensional clickable legend that will select points by both Origin and number of cylinders:</p>
1564
+
1565
+ </div>
1566
+ </div>
1567
+ </div>
1568
+
1569
+
1570
+
1571
+ <div class="
1572
+ cell border-box-sizing code_cell rendered">
1573
+ <div class="input">
1574
+
1575
+ <div class="inner_cell">
1576
+ <div class="input_area">
1577
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">selection</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_multi</span><span class="p">(</span><span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;Origin&#39;</span><span class="p">,</span> <span class="s1">&#39;Cylinders&#39;</span><span class="p">])</span>
1578
+
1579
+ <span class="n">color</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span>
1580
+ <span class="n">selection</span><span class="p">,</span>
1581
+ <span class="n">alt</span><span class="o">.</span><span class="n">Color</span><span class="p">(</span><span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">legend</span><span class="o">=</span><span class="kc">None</span><span class="p">),</span>
1582
+ <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;lightgray&#39;</span><span class="p">)</span>
1583
+ <span class="p">)</span>
1584
+
1585
+ <span class="n">scatter</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1586
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
1587
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
1588
+ <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">,</span>
1589
+ <span class="n">tooltip</span><span class="o">=</span><span class="s1">&#39;Name:N&#39;</span>
1590
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
1591
+ <span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
1592
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
1593
+ <span class="p">)</span>
1594
+
1595
+ <span class="n">legend</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_rect</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1596
+ <span class="n">y</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">Axis</span><span class="p">(</span><span class="n">orient</span><span class="o">=</span><span class="s1">&#39;right&#39;</span><span class="p">)),</span>
1597
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Cylinders:O&#39;</span><span class="p">,</span>
1598
+ <span class="n">color</span><span class="o">=</span><span class="n">color</span>
1599
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
1600
+ <span class="n">selection</span>
1601
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
1602
+ <span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
1603
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
1604
+ <span class="p">)</span>
1605
+
1606
+ <span class="n">scatter</span> <span class="o">|</span> <span class="n">legend</span>
1607
+ </pre></div>
1608
+
1609
+ </div>
1610
+ </div>
1611
+ </div>
1612
+
1613
+ <div class="output_wrapper">
1614
+ <div class="output">
1615
+
1616
+
1617
+ <div class="output_area">
1618
+
1619
+
1620
+
1621
+
1622
+ <div class="output_html rendered_html output_subarea output_execute_result">
1623
+
1624
+ <div id="altair-viz-6650b1f76d184dbeb03618d8f956655d"></div>
1625
+ <script type="text/javascript">
1626
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1627
+ (function(spec, embedOpt){
1628
+ let outputDiv = document.currentScript.previousElementSibling;
1629
+ if (outputDiv.id !== "altair-viz-6650b1f76d184dbeb03618d8f956655d") {
1630
+ outputDiv = document.getElementById("altair-viz-6650b1f76d184dbeb03618d8f956655d");
1631
+ }
1632
+ const paths = {
1633
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1634
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1635
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1636
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1637
+ };
1638
+
1639
+ function maybeLoadScript(lib, version) {
1640
+ var key = `${lib.replace("-", "")}_version`;
1641
+ return (VEGA_DEBUG[key] == version) ?
1642
+ Promise.resolve(paths[lib]) :
1643
+ new Promise(function(resolve, reject) {
1644
+ var s = document.createElement('script');
1645
+ document.getElementsByTagName("head")[0].appendChild(s);
1646
+ s.async = true;
1647
+ s.onload = () => {
1648
+ VEGA_DEBUG[key] = version;
1649
+ return resolve(paths[lib]);
1650
+ };
1651
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1652
+ s.src = paths[lib];
1653
+ });
1654
+ }
1655
+
1656
+ function showError(err) {
1657
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1658
+ throw err;
1659
+ }
1660
+
1661
+ function displayChart(vegaEmbed) {
1662
+ vegaEmbed(outputDiv, spec, embedOpt)
1663
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1664
+ }
1665
+
1666
+ if(typeof define === "function" && define.amd) {
1667
+ requirejs.config({paths});
1668
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1669
+ } else {
1670
+ maybeLoadScript("vega", "5")
1671
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1672
+ .then(() => maybeLoadScript("vega-embed", "6"))
1673
+ .catch(showError)
1674
+ .then(() => displayChart(vegaEmbed));
1675
+ }
1676
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "hconcat": [{"mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "legend": null, "type": "nominal", "selection": "selector017"}, "value": "lightgray"}, "tooltip": {"field": "Name", "type": "nominal"}, "x": {"field": "Horsepower", "type": "quantitative"}, "y": {"field": "Miles_per_Gallon", "type": "quantitative"}}, "height": 400, "width": 400}, {"mark": "rect", "encoding": {"color": {"condition": {"field": "Origin", "legend": null, "type": "nominal", "selection": "selector017"}, "value": "lightgray"}, "x": {"field": "Cylinders", "type": "ordinal"}, "y": {"axis": {"orient": "right"}, "field": "Origin", "type": "nominal"}}, "height": 400, "selection": {"selector017": {"type": "multi", "fields": ["Origin", "Cylinders"]}}, "width": 400}], "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1677
+ </script>
1678
+ </div>
1679
+
1680
+ </div>
1681
+
1682
+ </div>
1683
+ </div>
1684
+
1685
+ </div>
1686
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1687
+ <div class="text_cell_render border-box-sizing rendered_html">
1688
+ <p>By fine-tuning the behavior of selections in this way, they can be used to create a wide variety of linked interactive chart types.</p>
1689
+
1690
+ </div>
1691
+ </div>
1692
+ </div>
1693
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1694
+ <div class="text_cell_render border-box-sizing rendered_html">
1695
+ <h3 id="Binding:-Adding-Data-Driven-Inputs">Binding: Adding Data Driven Inputs<a class="anchor-link" href="#Binding:-Adding-Data-Driven-Inputs">&#182;</a></h3><p>With an understanding of the selection types and conditions, you can now add data-driven input elements to the charts using the bind option. As specified by Vega-lite binding, selections can be bound two-ways:</p>
1696
+ <ol>
1697
+ <li><p>Single selections can be bound directly to an input element, for example, a radio button.</p>
1698
+ </li>
1699
+ <li><p>Interval selections which can be bound to scale, for example, zooming in on a map.</p>
1700
+ </li>
1701
+ </ol>
1702
+
1703
+ </div>
1704
+ </div>
1705
+ </div>
1706
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1707
+ <div class="text_cell_render border-box-sizing rendered_html">
1708
+ <h4 id="Input-Element-Binding">Input Element Binding<a class="anchor-link" href="#Input-Element-Binding">&#182;</a></h4><p>With single selections, an input element can be added to the chart to establish a binding between the input and the selection.</p>
1709
+ <p>For instance, using our example from above a dropdown can be used to highlight cars from a specific origin :</p>
1710
+
1711
+ </div>
1712
+ </div>
1713
+ </div>
1714
+
1715
+
1716
+
1717
+ <div class="
1718
+ cell border-box-sizing code_cell rendered">
1719
+ <div class="input">
1720
+
1721
+ <div class="inner_cell">
1722
+ <div class="input_area">
1723
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">input_dropdown</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">binding_select</span><span class="p">(</span><span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;Europe&#39;</span><span class="p">,</span><span class="s1">&#39;Japan&#39;</span><span class="p">,</span><span class="s1">&#39;USA&#39;</span><span class="p">],</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;Country&#39;</span><span class="p">)</span>
1724
+
1725
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_single</span><span class="p">(</span>
1726
+ <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;Origin&#39;</span><span class="p">],</span>
1727
+ <span class="n">bind</span><span class="o">=</span><span class="n">input_dropdown</span>
1728
+ <span class="p">)</span>
1729
+
1730
+ <span class="n">color</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span>
1731
+ <span class="n">selection</span><span class="p">,</span>
1732
+ <span class="n">alt</span><span class="o">.</span><span class="n">Color</span><span class="p">(</span><span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span> <span class="n">legend</span><span class="o">=</span><span class="kc">None</span><span class="p">),</span>
1733
+ <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;lightgray&#39;</span><span class="p">)</span>
1734
+ <span class="p">)</span>
1735
+
1736
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1737
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
1738
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
1739
+ <span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">,</span>
1740
+ <span class="n">tooltip</span><span class="o">=</span><span class="s1">&#39;Name:N&#39;</span>
1741
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
1742
+ <span class="n">selection</span>
1743
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
1744
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
1745
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
1746
+ <span class="p">)</span>
1747
+ </pre></div>
1748
+
1749
+ </div>
1750
+ </div>
1751
+ </div>
1752
+
1753
+ <div class="output_wrapper">
1754
+ <div class="output">
1755
+
1756
+
1757
+ <div class="output_area">
1758
+
1759
+
1760
+
1761
+
1762
+ <div class="output_html rendered_html output_subarea output_execute_result">
1763
+
1764
+ <div id="altair-viz-bd49ae238c684a78841b72b6e3f12e42"></div>
1765
+ <script type="text/javascript">
1766
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1767
+ (function(spec, embedOpt){
1768
+ let outputDiv = document.currentScript.previousElementSibling;
1769
+ if (outputDiv.id !== "altair-viz-bd49ae238c684a78841b72b6e3f12e42") {
1770
+ outputDiv = document.getElementById("altair-viz-bd49ae238c684a78841b72b6e3f12e42");
1771
+ }
1772
+ const paths = {
1773
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1774
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1775
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1776
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1777
+ };
1778
+
1779
+ function maybeLoadScript(lib, version) {
1780
+ var key = `${lib.replace("-", "")}_version`;
1781
+ return (VEGA_DEBUG[key] == version) ?
1782
+ Promise.resolve(paths[lib]) :
1783
+ new Promise(function(resolve, reject) {
1784
+ var s = document.createElement('script');
1785
+ document.getElementsByTagName("head")[0].appendChild(s);
1786
+ s.async = true;
1787
+ s.onload = () => {
1788
+ VEGA_DEBUG[key] = version;
1789
+ return resolve(paths[lib]);
1790
+ };
1791
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1792
+ s.src = paths[lib];
1793
+ });
1794
+ }
1795
+
1796
+ function showError(err) {
1797
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1798
+ throw err;
1799
+ }
1800
+
1801
+ function displayChart(vegaEmbed) {
1802
+ vegaEmbed(outputDiv, spec, embedOpt)
1803
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1804
+ }
1805
+
1806
+ if(typeof define === "function" && define.amd) {
1807
+ requirejs.config({paths});
1808
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1809
+ } else {
1810
+ maybeLoadScript("vega", "5")
1811
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1812
+ .then(() => maybeLoadScript("vega-embed", "6"))
1813
+ .catch(showError)
1814
+ .then(() => displayChart(vegaEmbed));
1815
+ }
1816
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "point", "encoding": {"color": {"condition": {"field": "Origin", "legend": null, "type": "nominal", "selection": "selector012"}, "value": "lightgray"}, "tooltip": {"field": "Name", "type": "nominal"}, "x": {"field": "Horsepower", "type": "quantitative"}, "y": {"field": "Miles_per_Gallon", "type": "quantitative"}}, "height": 400, "selection": {"selector012": {"type": "single", "fields": ["Origin"], "bind": {"input": "select", "options": ["Europe", "Japan", "USA"], "name": "Country"}}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1817
+ </script>
1818
+ </div>
1819
+
1820
+ </div>
1821
+
1822
+ </div>
1823
+ </div>
1824
+
1825
+ </div>
1826
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1827
+ <div class="text_cell_render border-box-sizing rendered_html">
1828
+ <p>The above example shows all three elements at work. The :input_dropdown: is :bind: to the :selection: which is called from the :condition: encoded through the data.</p>
1829
+ <p>The following are the input elements supported in vega-lite:</p>
1830
+ <table>
1831
+ <thead><tr>
1832
+ <th style="text-align:left">Input Element</th>
1833
+ <th style="text-align:left">Description</th>
1834
+ <th style="text-align:left">Example</th>
1835
+ </tr>
1836
+ </thead>
1837
+ <tbody>
1838
+ <tr>
1839
+ <td style="text-align:left">binding_checkbox</td>
1840
+ <td style="text-align:left">Renders as checkboxes allowing for multiple selections of items.</td>
1841
+ <td style="text-align:left">Multiple Interactions</td>
1842
+ </tr>
1843
+ <tr>
1844
+ <td style="text-align:left">binding_radio</td>
1845
+ <td style="text-align:left">Radio buttons that force only a single selection</td>
1846
+ <td style="text-align:left">Multiple Interactions</td>
1847
+ </tr>
1848
+ <tr>
1849
+ <td style="text-align:left">binding_select</td>
1850
+ <td style="text-align:left">Drop down box for selecting a single item from a list</td>
1851
+ <td style="text-align:left">Multiple Interactions</td>
1852
+ </tr>
1853
+ <tr>
1854
+ <td style="text-align:left">binding_range</td>
1855
+ <td style="text-align:left">Shown as a slider to allow for selection along a scale.</td>
1856
+ <td style="text-align:left">US Population Over Time</td>
1857
+ </tr>
1858
+ </tbody>
1859
+ </table>
1860
+ <p>Bindings and input elements can also be used to filter data on the client side. Reducing noise in the chart and allowing the user to see just certain selected elements:</p>
1861
+
1862
+ </div>
1863
+ </div>
1864
+ </div>
1865
+
1866
+
1867
+
1868
+ <div class="
1869
+ cell border-box-sizing code_cell rendered">
1870
+ <div class="input">
1871
+
1872
+ <div class="inner_cell">
1873
+ <div class="input_area">
1874
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">input_dropdown</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">binding_select</span><span class="p">(</span>
1875
+ <span class="n">options</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;Europe&#39;</span><span class="p">,</span><span class="s1">&#39;Japan&#39;</span><span class="p">,</span><span class="s1">&#39;USA&#39;</span><span class="p">],</span>
1876
+ <span class="n">name</span><span class="o">=</span><span class="s1">&#39;Country&#39;</span>
1877
+ <span class="p">)</span>
1878
+
1879
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_single</span><span class="p">(</span>
1880
+ <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;Origin&#39;</span><span class="p">],</span>
1881
+ <span class="n">bind</span><span class="o">=</span><span class="n">input_dropdown</span>
1882
+ <span class="p">)</span>
1883
+
1884
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1885
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
1886
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
1887
+ <span class="n">color</span><span class="o">=</span><span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span>
1888
+ <span class="n">tooltip</span><span class="o">=</span><span class="s1">&#39;Name:N&#39;</span>
1889
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
1890
+ <span class="n">selection</span>
1891
+ <span class="p">)</span><span class="o">.</span><span class="n">transform_filter</span><span class="p">(</span>
1892
+ <span class="n">selection</span>
1893
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
1894
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
1895
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
1896
+ <span class="p">)</span>
1897
+ </pre></div>
1898
+
1899
+ </div>
1900
+ </div>
1901
+ </div>
1902
+
1903
+ <div class="output_wrapper">
1904
+ <div class="output">
1905
+
1906
+
1907
+ <div class="output_area">
1908
+
1909
+
1910
+
1911
+
1912
+ <div class="output_html rendered_html output_subarea output_execute_result">
1913
+
1914
+ <div id="altair-viz-82cfae8715fe45a1a5f0db027dbd882b"></div>
1915
+ <script type="text/javascript">
1916
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1917
+ (function(spec, embedOpt){
1918
+ let outputDiv = document.currentScript.previousElementSibling;
1919
+ if (outputDiv.id !== "altair-viz-82cfae8715fe45a1a5f0db027dbd882b") {
1920
+ outputDiv = document.getElementById("altair-viz-82cfae8715fe45a1a5f0db027dbd882b");
1921
+ }
1922
+ const paths = {
1923
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1924
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1925
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1926
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1927
+ };
1928
+
1929
+ function maybeLoadScript(lib, version) {
1930
+ var key = `${lib.replace("-", "")}_version`;
1931
+ return (VEGA_DEBUG[key] == version) ?
1932
+ Promise.resolve(paths[lib]) :
1933
+ new Promise(function(resolve, reject) {
1934
+ var s = document.createElement('script');
1935
+ document.getElementsByTagName("head")[0].appendChild(s);
1936
+ s.async = true;
1937
+ s.onload = () => {
1938
+ VEGA_DEBUG[key] = version;
1939
+ return resolve(paths[lib]);
1940
+ };
1941
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1942
+ s.src = paths[lib];
1943
+ });
1944
+ }
1945
+
1946
+ function showError(err) {
1947
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1948
+ throw err;
1949
+ }
1950
+
1951
+ function displayChart(vegaEmbed) {
1952
+ vegaEmbed(outputDiv, spec, embedOpt)
1953
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1954
+ }
1955
+
1956
+ if(typeof define === "function" && define.amd) {
1957
+ requirejs.config({paths});
1958
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1959
+ } else {
1960
+ maybeLoadScript("vega", "5")
1961
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1962
+ .then(() => maybeLoadScript("vega-embed", "6"))
1963
+ .catch(showError)
1964
+ .then(() => displayChart(vegaEmbed));
1965
+ }
1966
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "point", "encoding": {"color": {"field": "Origin", "type": "nominal"}, "tooltip": {"field": "Name", "type": "nominal"}, "x": {"field": "Horsepower", "type": "quantitative"}, "y": {"field": "Miles_per_Gallon", "type": "quantitative"}}, "height": 400, "selection": {"selector013": {"type": "single", "fields": ["Origin"], "bind": {"input": "select", "options": ["Europe", "Japan", "USA"], "name": "Country"}}}, "transform": [{"filter": {"selection": "selector013"}}], "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1967
+ </script>
1968
+ </div>
1969
+
1970
+ </div>
1971
+
1972
+ </div>
1973
+ </div>
1974
+
1975
+ </div>
1976
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1977
+ <div class="text_cell_render border-box-sizing rendered_html">
1978
+ <h4 id="Scale-Binding">Scale Binding<a class="anchor-link" href="#Scale-Binding">&#182;</a></h4><p>With interval selections, the bind property can be set to the value of "scales". In these cases, the binding will automatically respond to the panning and zooming along the chart:</p>
1979
+
1980
+ </div>
1981
+ </div>
1982
+ </div>
1983
+
1984
+
1985
+
1986
+ <div class="
1987
+ cell border-box-sizing code_cell rendered">
1988
+ <div class="input">
1989
+
1990
+ <div class="inner_cell">
1991
+ <div class="input_area">
1992
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">selection</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_interval</span><span class="p">(</span>
1993
+ <span class="n">bind</span><span class="o">=</span><span class="s1">&#39;scales&#39;</span>
1994
+ <span class="p">)</span>
1995
+
1996
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1997
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;Horsepower:Q&#39;</span><span class="p">,</span>
1998
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Miles_per_Gallon:Q&#39;</span><span class="p">,</span>
1999
+ <span class="n">color</span><span class="o">=</span><span class="s1">&#39;Origin:N&#39;</span><span class="p">,</span>
2000
+ <span class="n">tooltip</span><span class="o">=</span><span class="s1">&#39;Name:N&#39;</span>
2001
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
2002
+ <span class="n">selection</span>
2003
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
2004
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
2005
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
2006
+ <span class="p">)</span>
2007
+ </pre></div>
2008
+
2009
+ </div>
2010
+ </div>
2011
+ </div>
2012
+
2013
+ <div class="output_wrapper">
2014
+ <div class="output">
2015
+
2016
+
2017
+ <div class="output_area">
2018
+
2019
+
2020
+
2021
+
2022
+ <div class="output_html rendered_html output_subarea output_execute_result">
2023
+
2024
+ <div id="altair-viz-985bb547a8b6437eabeccca99ad749bb"></div>
2025
+ <script type="text/javascript">
2026
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
2027
+ (function(spec, embedOpt){
2028
+ let outputDiv = document.currentScript.previousElementSibling;
2029
+ if (outputDiv.id !== "altair-viz-985bb547a8b6437eabeccca99ad749bb") {
2030
+ outputDiv = document.getElementById("altair-viz-985bb547a8b6437eabeccca99ad749bb");
2031
+ }
2032
+ const paths = {
2033
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
2034
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
2035
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
2036
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
2037
+ };
2038
+
2039
+ function maybeLoadScript(lib, version) {
2040
+ var key = `${lib.replace("-", "")}_version`;
2041
+ return (VEGA_DEBUG[key] == version) ?
2042
+ Promise.resolve(paths[lib]) :
2043
+ new Promise(function(resolve, reject) {
2044
+ var s = document.createElement('script');
2045
+ document.getElementsByTagName("head")[0].appendChild(s);
2046
+ s.async = true;
2047
+ s.onload = () => {
2048
+ VEGA_DEBUG[key] = version;
2049
+ return resolve(paths[lib]);
2050
+ };
2051
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
2052
+ s.src = paths[lib];
2053
+ });
2054
+ }
2055
+
2056
+ function showError(err) {
2057
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
2058
+ throw err;
2059
+ }
2060
+
2061
+ function displayChart(vegaEmbed) {
2062
+ vegaEmbed(outputDiv, spec, embedOpt)
2063
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
2064
+ }
2065
+
2066
+ if(typeof define === "function" && define.amd) {
2067
+ requirejs.config({paths});
2068
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
2069
+ } else {
2070
+ maybeLoadScript("vega", "5")
2071
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
2072
+ .then(() => maybeLoadScript("vega-embed", "6"))
2073
+ .catch(showError)
2074
+ .then(() => displayChart(vegaEmbed));
2075
+ }
2076
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/cars.json"}, "mark": "point", "encoding": {"color": {"field": "Origin", "type": "nominal"}, "tooltip": {"field": "Name", "type": "nominal"}, "x": {"field": "Horsepower", "type": "quantitative"}, "y": {"field": "Miles_per_Gallon", "type": "quantitative"}}, "height": 400, "selection": {"selector014": {"type": "interval", "bind": "scales"}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
2077
+ </script>
2078
+ </div>
2079
+
2080
+ </div>
2081
+
2082
+ </div>
2083
+ </div>
2084
+
2085
+ </div>
2086
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
2087
+ <div class="text_cell_render border-box-sizing rendered_html">
2088
+ <h3 id="Selection-Values-in-Expressions">Selection Values in Expressions<a class="anchor-link" href="#Selection-Values-in-Expressions">&#182;</a></h3><p>Selection values can be accessed directly and used in expressions that affect the chart. For example, here we create a slider to choose a cutoff value, and color points based on whether they are smaller or larger than the value:</p>
2089
+
2090
+ </div>
2091
+ </div>
2092
+ </div>
2093
+
2094
+
2095
+
2096
+ <div class="
2097
+ cell border-box-sizing code_cell rendered">
2098
+ <div class="input">
2099
+
2100
+ <div class="inner_cell">
2101
+ <div class="input_area">
2102
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
2103
+ <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
2104
+
2105
+ <span class="n">rand</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">RandomState</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span>
2106
+
2107
+ <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span>
2108
+ <span class="s1">&#39;xval&#39;</span><span class="p">:</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">),</span>
2109
+ <span class="s1">&#39;yval&#39;</span><span class="p">:</span> <span class="n">rand</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span><span class="o">.</span><span class="n">cumsum</span><span class="p">()</span>
2110
+ <span class="p">})</span>
2111
+
2112
+ <span class="n">slider</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">binding_range</span><span class="p">(</span>
2113
+ <span class="nb">min</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
2114
+ <span class="nb">max</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
2115
+ <span class="n">step</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
2116
+ <span class="n">name</span><span class="o">=</span><span class="s1">&#39;cutoff:&#39;</span>
2117
+ <span class="p">)</span>
2118
+
2119
+ <span class="n">selector</span> <span class="o">=</span> <span class="n">alt</span><span class="o">.</span><span class="n">selection_single</span><span class="p">(</span>
2120
+ <span class="n">name</span><span class="o">=</span><span class="s2">&quot;SelectorName&quot;</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;cutoff&#39;</span><span class="p">],</span>
2121
+ <span class="n">bind</span><span class="o">=</span><span class="n">slider</span><span class="p">,</span> <span class="n">init</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;cutoff&#39;</span><span class="p">:</span> <span class="mi">50</span><span class="p">}</span>
2122
+ <span class="p">)</span>
2123
+
2124
+ <span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">df</span><span class="p">)</span><span class="o">.</span><span class="n">mark_point</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
2125
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;xval&#39;</span><span class="p">,</span>
2126
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;yval&#39;</span><span class="p">,</span>
2127
+ <span class="n">color</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">condition</span><span class="p">(</span>
2128
+ <span class="n">alt</span><span class="o">.</span><span class="n">datum</span><span class="o">.</span><span class="n">xval</span> <span class="o">&lt;</span> <span class="n">selector</span><span class="o">.</span><span class="n">cutoff</span><span class="p">,</span>
2129
+ <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;red&#39;</span><span class="p">),</span> <span class="n">alt</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s1">&#39;blue&#39;</span><span class="p">)</span>
2130
+ <span class="p">)</span>
2131
+ <span class="p">)</span><span class="o">.</span><span class="n">add_selection</span><span class="p">(</span>
2132
+ <span class="n">selector</span>
2133
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
2134
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
2135
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
2136
+ <span class="p">)</span>
2137
+ </pre></div>
2138
+
2139
+ </div>
2140
+ </div>
2141
+ </div>
2142
+
2143
+ <div class="output_wrapper">
2144
+ <div class="output">
2145
+
2146
+
2147
+ <div class="output_area">
2148
+
2149
+
2150
+
2151
+
2152
+ <div class="output_html rendered_html output_subarea output_execute_result">
2153
+
2154
+ <div id="altair-viz-aff84924219d47ef975850b04367c733"></div>
2155
+ <script type="text/javascript">
2156
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
2157
+ (function(spec, embedOpt){
2158
+ let outputDiv = document.currentScript.previousElementSibling;
2159
+ if (outputDiv.id !== "altair-viz-aff84924219d47ef975850b04367c733") {
2160
+ outputDiv = document.getElementById("altair-viz-aff84924219d47ef975850b04367c733");
2161
+ }
2162
+ const paths = {
2163
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
2164
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
2165
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
2166
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
2167
+ };
2168
+
2169
+ function maybeLoadScript(lib, version) {
2170
+ var key = `${lib.replace("-", "")}_version`;
2171
+ return (VEGA_DEBUG[key] == version) ?
2172
+ Promise.resolve(paths[lib]) :
2173
+ new Promise(function(resolve, reject) {
2174
+ var s = document.createElement('script');
2175
+ document.getElementsByTagName("head")[0].appendChild(s);
2176
+ s.async = true;
2177
+ s.onload = () => {
2178
+ VEGA_DEBUG[key] = version;
2179
+ return resolve(paths[lib]);
2180
+ };
2181
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
2182
+ s.src = paths[lib];
2183
+ });
2184
+ }
2185
+
2186
+ function showError(err) {
2187
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
2188
+ throw err;
2189
+ }
2190
+
2191
+ function displayChart(vegaEmbed) {
2192
+ vegaEmbed(outputDiv, spec, embedOpt)
2193
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
2194
+ }
2195
+
2196
+ if(typeof define === "function" && define.amd) {
2197
+ requirejs.config({paths});
2198
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
2199
+ } else {
2200
+ maybeLoadScript("vega", "5")
2201
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
2202
+ .then(() => maybeLoadScript("vega-embed", "6"))
2203
+ .catch(showError)
2204
+ .then(() => displayChart(vegaEmbed));
2205
+ }
2206
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"name": "data-a99664901d810a6b330d8e4930eed708"}, "mark": "point", "encoding": {"color": {"condition": {"value": "red", "test": "(datum.xval < SelectorName.cutoff)"}, "value": "blue"}, "x": {"field": "xval", "type": "quantitative"}, "y": {"field": "yval", "type": "quantitative"}}, "height": 400, "selection": {"SelectorName": {"type": "single", "fields": ["cutoff"], "bind": {"input": "range", "max": 100, "min": 0, "name": "cutoff:", "step": 1}, "init": {"cutoff": 50}}}, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json", "datasets": {"data-a99664901d810a6b330d8e4930eed708": [{"xval": 0, "yval": 0.4967141530112327}, {"xval": 1, "yval": 0.358449851840048}, {"xval": 2, "yval": 1.0061383899407406}, {"xval": 3, "yval": 2.5291682463487657}, {"xval": 4, "yval": 2.2950148716254297}, {"xval": 5, "yval": 2.060877914676249}, {"xval": 6, "yval": 3.6400907301836405}, {"xval": 7, "yval": 4.407525459336549}, {"xval": 8, "yval": 3.938051073401597}, {"xval": 9, "yval": 4.4806111169875615}, {"xval": 10, "yval": 4.017193424175099}, {"xval": 11, "yval": 3.5514636706048424}, {"xval": 12, "yval": 3.7934259421708765}, {"xval": 13, "yval": 1.8801456975130786}, {"xval": 14, "yval": 0.15522786500004582}, {"xval": 15, "yval": -0.4070596642409269}, {"xval": 16, "yval": -1.4198907845753506}, {"xval": 17, "yval": -1.1056434519800766}, {"xval": 18, "yval": -2.0136675275012874}, {"xval": 19, "yval": -3.4259712288365787}, {"xval": 20, "yval": -1.9603224599150246}, {"xval": 21, "yval": -2.1860987604015603}, {"xval": 22, "yval": -2.1185705557136365}, {"xval": 23, "yval": -3.5433187419270933}, {"xval": 24, "yval": -4.087701466452276}, {"xval": 25, "yval": -3.9767788767424097}, {"xval": 26, "yval": -5.127772454164712}, {"xval": 27, "yval": -4.75207443581904}, {"xval": 28, "yval": -5.352713125737845}, {"xval": 29, "yval": -5.644406875531121}, {"xval": 30, "yval": -6.2461134877605184}, {"xval": 31, "yval": -4.3938353032515804}, {"xval": 32, "yval": -4.407332527989515}, {"xval": 33, "yval": -5.4650434569454145}, {"xval": 34, "yval": -4.642498544842225}, {"xval": 35, "yval": -5.863342194813248}, {"xval": 36, "yval": -5.654478599808492}, {"xval": 37, "yval": -7.614148723688268}, {"xval": 38, "yval": -8.942334772586698}, {"xval": 39, "yval": -8.745473536717574}, {"xval": 40, "yval": -8.007006956722163}, {"xval": 41, "yval": -7.835638675532193}, {"xval": 42, "yval": -7.951286957920433}, {"xval": 43, "yval": -8.252390653509723}, {"xval": 44, "yval": -9.73091264387715}, {"xval": 45, "yval": -10.450756852271859}, {"xval": 46, "yval": -10.911395623231646}, {"xval": 47, "yval": -9.854273397012731}, {"xval": 48, "yval": -9.51065510744427}, {"xval": 49, "yval": -11.273695262807005}, {"xval": 50, "yval": -10.94961129341221}, {"xval": 51, "yval": -11.334693573828526}, {"xval": 52, "yval": -12.011615574134485}, {"xval": 53, "yval": -11.399939285293616}, {"xval": 54, "yval": -10.368939762797666}, {"xval": 55, "yval": -9.437659643681467}, {"xval": 56, "yval": -10.276877166904105}, {"xval": 57, "yval": -10.58608954275532}, {"xval": 58, "yval": -10.254826111351756}, {"xval": 59, "yval": -9.279280984229397}, {"xval": 60, "yval": -9.758455222074687}, {"xval": 61, "yval": -9.944114198738504}, {"xval": 62, "yval": -11.050449172744532}, {"xval": 63, "yval": -12.246655796825202}, {"xval": 64, "yval": -11.434129974431004}, {"xval": 65, "yval": -10.07788994586018}, {"xval": 66, "yval": -10.149900067440514}, {"xval": 67, "yval": -9.14636716954849}, {"xval": 68, "yval": -8.784731144500856}, {"xval": 69, "yval": -9.42985089910598}, {"xval": 70, "yval": -9.068455293597568}, {"xval": 71, "yval": -7.5304187271315985}, {"xval": 72, "yval": -7.56624476624155}, {"xval": 73, "yval": -6.001601110427544}, {"xval": 74, "yval": -8.621346214517288}, {"xval": 75, "yval": -7.799443710142064}, {"xval": 76, "yval": -7.712396641903893}, {"xval": 77, "yval": -8.011403992369761}, {"xval": 78, "yval": -7.919643215834259}, {"xval": 79, "yval": -9.907212130435152}, {"xval": 80, "yval": -10.126884018272664}, {"xval": 81, "yval": -9.769771446760917}, {"xval": 82, "yval": -8.2918774020194}, {"xval": 83, "yval": -8.810147620293048}, {"xval": 84, "yval": -9.618641223186236}, {"xval": 85, "yval": -10.120398266770772}, {"xval": 86, "yval": -9.204996149068698}, {"xval": 87, "yval": -8.876245039409014}, {"xval": 88, "yval": -9.406005243176052}, {"xval": 89, "yval": -8.892737810062696}, {"xval": 90, "yval": -8.795660260714657}, {"xval": 91, "yval": -7.827015270181768}, {"xval": 92, "yval": -8.529068364059121}, {"xval": 93, "yval": -8.85673051065689}, {"xval": 94, "yval": -9.248838663789048}, {"xval": 95, "yval": -10.712353611921166}, {"xval": 96, "yval": -10.41623333485659}, {"xval": 97, "yval": -10.1551780626767}, {"xval": 98, "yval": -10.15006460603424}, {"xval": 99, "yval": -10.384651739409387}]}}, {"mode": "vega-lite"});
2207
+ </script>
2208
+ </div>
2209
+
2210
+ </div>
2211
+
2212
+ </div>
2213
+ </div>
2214
+
2215
+ </div>
2216
+