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,1563 @@
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="6.-Linking-and-Interactions">6. Linking and Interactions<a class="anchor-link" href="#6.-Linking-and-Interactions">&#182;</a></h2><p>Now that we know from the previous chapter how multiple plots can be placed together in a layout, we can start to look at how different plots can be linked together, or how plots can be linked to widgets.</p>
12
+
13
+ </div>
14
+ </div>
15
+ </div>
16
+
17
+
18
+
19
+ <div class="
20
+ cell border-box-sizing code_cell rendered">
21
+ <div class="input">
22
+
23
+ <div class="inner_cell">
24
+ <div class="input_area">
25
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">bokeh</span> <span class="kn">import</span> <span class="n">events</span>
26
+ <span class="kn">from</span> <span class="nn">bokeh.io</span> <span class="kn">import</span> <span class="n">output_notebook</span><span class="p">,</span> <span class="n">show</span>
27
+ <span class="kn">from</span> <span class="nn">bokeh.plotting</span> <span class="kn">import</span> <span class="n">figure</span>
28
+
29
+ <span class="kn">from</span> <span class="nn">bokeh.layouts</span> <span class="kn">import</span> <span class="n">gridplot</span><span class="p">,</span> <span class="n">column</span><span class="p">,</span> <span class="n">row</span>
30
+ <span class="kn">from</span> <span class="nn">bokeh.models</span> <span class="kn">import</span> <span class="n">Button</span><span class="p">,</span> <span class="n">ColumnDataSource</span><span class="p">,</span> <span class="n">CustomJS</span><span class="p">,</span> <span class="n">Div</span><span class="p">,</span> <span class="n">HoverTool</span><span class="p">,</span> <span class="n">TapTool</span>
31
+ <span class="kn">from</span> <span class="nn">bokeh.models.widgets</span> <span class="kn">import</span> <span class="n">Slider</span><span class="p">,</span> <span class="n">Button</span>
32
+
33
+ <span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">random</span>
34
+ <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
35
+ </pre></div>
36
+
37
+ </div>
38
+ </div>
39
+ </div>
40
+
41
+ </div>
42
+
43
+
44
+
45
+ <div class="nbinteract-hide_out
46
+ cell border-box-sizing code_cell rendered">
47
+ <div class="input">
48
+
49
+ <div class="inner_cell">
50
+ <div class="input_area">
51
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#nbi:hide_out</span>
52
+ <span class="c1"># Make all outputs INLINE for default (why a hell this is needed !!!)</span>
53
+ <span class="n">output_notebook</span><span class="p">()</span>
54
+ </pre></div>
55
+
56
+ </div>
57
+ </div>
58
+ </div>
59
+
60
+ <div class="output_wrapper">
61
+ <div class="output">
62
+
63
+
64
+ <div class="output_area">
65
+
66
+
67
+
68
+
69
+ <div class="output_html rendered_html output_subarea ">
70
+ <div class="bk-root">
71
+ <a href="https://bokeh.org" target="_blank" class="bk-logo bk-logo-small bk-logo-notebook"></a>
72
+ <span id="1002">Loading BokehJS ...</span>
73
+ </div>
74
+
75
+ </div>
76
+
77
+ </div>
78
+
79
+ <div class="output_area">
80
+
81
+
82
+
83
+
84
+
85
+
86
+ <div id="11e7b812-21b7-4141-b9a9-e5b7e9643b81"></div>
87
+ <div class="output_subarea output_javascript ">
88
+ <script type="text/javascript">
89
+ var element = $('#11e7b812-21b7-4141-b9a9-e5b7e9643b81');
90
+ (function(root) {
91
+ function now() {
92
+ return new Date();
93
+ }
94
+
95
+ const force = true;
96
+
97
+ if (typeof root._bokeh_onload_callbacks === "undefined" || force === true) {
98
+ root._bokeh_onload_callbacks = [];
99
+ root._bokeh_is_loading = undefined;
100
+ }
101
+
102
+ const JS_MIME_TYPE = 'application/javascript';
103
+ const HTML_MIME_TYPE = 'text/html';
104
+ const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';
105
+ const CLASS_NAME = 'output_bokeh rendered_html';
106
+
107
+ /**
108
+ * Render data to the DOM node
109
+ */
110
+ function render(props, node) {
111
+ const script = document.createElement("script");
112
+ node.appendChild(script);
113
+ }
114
+
115
+ /**
116
+ * Handle when an output is cleared or removed
117
+ */
118
+ function handleClearOutput(event, handle) {
119
+ const cell = handle.cell;
120
+
121
+ const id = cell.output_area._bokeh_element_id;
122
+ const server_id = cell.output_area._bokeh_server_id;
123
+ // Clean up Bokeh references
124
+ if (id != null && id in Bokeh.index) {
125
+ Bokeh.index[id].model.document.clear();
126
+ delete Bokeh.index[id];
127
+ }
128
+
129
+ if (server_id !== undefined) {
130
+ // Clean up Bokeh references
131
+ const cmd_clean = "from bokeh.io.state import curstate; print(curstate().uuid_to_server['" + server_id + "'].get_sessions()[0].document.roots[0]._id)";
132
+ cell.notebook.kernel.execute(cmd_clean, {
133
+ iopub: {
134
+ output: function(msg) {
135
+ const id = msg.content.text.trim();
136
+ if (id in Bokeh.index) {
137
+ Bokeh.index[id].model.document.clear();
138
+ delete Bokeh.index[id];
139
+ }
140
+ }
141
+ }
142
+ });
143
+ // Destroy server and session
144
+ const cmd_destroy = "import bokeh.io.notebook as ion; ion.destroy_server('" + server_id + "')";
145
+ cell.notebook.kernel.execute(cmd_destroy);
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Handle when a new output is added
151
+ */
152
+ function handleAddOutput(event, handle) {
153
+ const output_area = handle.output_area;
154
+ const output = handle.output;
155
+
156
+ // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only
157
+ if ((output.output_type != "display_data") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {
158
+ return
159
+ }
160
+
161
+ const toinsert = output_area.element.find("." + CLASS_NAME.split(' ')[0]);
162
+
163
+ if (output.metadata[EXEC_MIME_TYPE]["id"] !== undefined) {
164
+ toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];
165
+ // store reference to embed id on output_area
166
+ output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE]["id"];
167
+ }
168
+ if (output.metadata[EXEC_MIME_TYPE]["server_id"] !== undefined) {
169
+ const bk_div = document.createElement("div");
170
+ bk_div.innerHTML = output.data[HTML_MIME_TYPE];
171
+ const script_attrs = bk_div.children[0].attributes;
172
+ for (let i = 0; i < script_attrs.length; i++) {
173
+ toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);
174
+ toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent
175
+ }
176
+ // store reference to server id on output_area
177
+ output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE]["server_id"];
178
+ }
179
+ }
180
+
181
+ function register_renderer(events, OutputArea) {
182
+
183
+ function append_mime(data, metadata, element) {
184
+ // create a DOM node to render to
185
+ const toinsert = this.create_output_subarea(
186
+ metadata,
187
+ CLASS_NAME,
188
+ EXEC_MIME_TYPE
189
+ );
190
+ this.keyboard_manager.register_events(toinsert);
191
+ // Render to node
192
+ const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};
193
+ render(props, toinsert[toinsert.length - 1]);
194
+ element.append(toinsert);
195
+ return toinsert
196
+ }
197
+
198
+ /* Handle when an output is cleared or removed */
199
+ events.on('clear_output.CodeCell', handleClearOutput);
200
+ events.on('delete.Cell', handleClearOutput);
201
+
202
+ /* Handle when a new output is added */
203
+ events.on('output_added.OutputArea', handleAddOutput);
204
+
205
+ /**
206
+ * Register the mime type and append_mime function with output_area
207
+ */
208
+ OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {
209
+ /* Is output safe? */
210
+ safe: true,
211
+ /* Index of renderer in `output_area.display_order` */
212
+ index: 0
213
+ });
214
+ }
215
+
216
+ // register the mime type if in Jupyter Notebook environment and previously unregistered
217
+ if (root.Jupyter !== undefined) {
218
+ const events = require('base/js/events');
219
+ const OutputArea = require('notebook/js/outputarea').OutputArea;
220
+
221
+ if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {
222
+ register_renderer(events, OutputArea);
223
+ }
224
+ }
225
+ if (typeof (root._bokeh_timeout) === "undefined" || force === true) {
226
+ root._bokeh_timeout = Date.now() + 5000;
227
+ root._bokeh_failed_load = false;
228
+ }
229
+
230
+ const NB_LOAD_WARNING = {'data': {'text/html':
231
+ "<div style='background-color: #fdd'>\n"+
232
+ "<p>\n"+
233
+ "BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \n"+
234
+ "may be due to a slow or bad network connection. Possible fixes:\n"+
235
+ "</p>\n"+
236
+ "<ul>\n"+
237
+ "<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\n"+
238
+ "<li>use INLINE resources instead, as so:</li>\n"+
239
+ "</ul>\n"+
240
+ "<code>\n"+
241
+ "from bokeh.resources import INLINE\n"+
242
+ "output_notebook(resources=INLINE)\n"+
243
+ "</code>\n"+
244
+ "</div>"}};
245
+
246
+ function display_loaded() {
247
+ const el = document.getElementById("1002");
248
+ if (el != null) {
249
+ el.textContent = "BokehJS is loading...";
250
+ }
251
+ if (root.Bokeh !== undefined) {
252
+ if (el != null) {
253
+ el.textContent = "BokehJS " + root.Bokeh.version + " successfully loaded.";
254
+ }
255
+ } else if (Date.now() < root._bokeh_timeout) {
256
+ setTimeout(display_loaded, 100)
257
+ }
258
+ }
259
+
260
+ function run_callbacks() {
261
+ try {
262
+ root._bokeh_onload_callbacks.forEach(function(callback) {
263
+ if (callback != null)
264
+ callback();
265
+ });
266
+ } finally {
267
+ delete root._bokeh_onload_callbacks
268
+ }
269
+ console.debug("Bokeh: all callbacks have finished");
270
+ }
271
+
272
+ function load_libs(css_urls, js_urls, callback) {
273
+ if (css_urls == null) css_urls = [];
274
+ if (js_urls == null) js_urls = [];
275
+
276
+ root._bokeh_onload_callbacks.push(callback);
277
+ if (root._bokeh_is_loading > 0) {
278
+ console.debug("Bokeh: BokehJS is being loaded, scheduling callback at", now());
279
+ return null;
280
+ }
281
+ if (js_urls == null || js_urls.length === 0) {
282
+ run_callbacks();
283
+ return null;
284
+ }
285
+ console.debug("Bokeh: BokehJS not loaded, scheduling load and callback at", now());
286
+ root._bokeh_is_loading = css_urls.length + js_urls.length;
287
+
288
+ function on_load() {
289
+ root._bokeh_is_loading--;
290
+ if (root._bokeh_is_loading === 0) {
291
+ console.debug("Bokeh: all BokehJS libraries/stylesheets loaded");
292
+ run_callbacks()
293
+ }
294
+ }
295
+
296
+ function on_error(url) {
297
+ console.error("failed to load " + url);
298
+ }
299
+
300
+ for (let i = 0; i < css_urls.length; i++) {
301
+ const url = css_urls[i];
302
+ const element = document.createElement("link");
303
+ element.onload = on_load;
304
+ element.onerror = on_error.bind(null, url);
305
+ element.rel = "stylesheet";
306
+ element.type = "text/css";
307
+ element.href = url;
308
+ console.debug("Bokeh: injecting link tag for BokehJS stylesheet: ", url);
309
+ document.body.appendChild(element);
310
+ }
311
+
312
+ for (let i = 0; i < js_urls.length; i++) {
313
+ const url = js_urls[i];
314
+ const element = document.createElement('script');
315
+ element.onload = on_load;
316
+ element.onerror = on_error.bind(null, url);
317
+ element.async = false;
318
+ element.src = url;
319
+ console.debug("Bokeh: injecting script tag for BokehJS library: ", url);
320
+ document.head.appendChild(element);
321
+ }
322
+ };
323
+
324
+ function inject_raw_css(css) {
325
+ const element = document.createElement("style");
326
+ element.appendChild(document.createTextNode(css));
327
+ document.body.appendChild(element);
328
+ }
329
+
330
+ const js_urls = ["https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js"];
331
+ const css_urls = [];
332
+
333
+ const inline_js = [ function(Bokeh) {
334
+ Bokeh.set_log_level("info");
335
+ },
336
+ function(Bokeh) {
337
+ }
338
+ ];
339
+
340
+ function run_inline_js() {
341
+ if (root.Bokeh !== undefined || force === true) {
342
+ for (let i = 0; i < inline_js.length; i++) {
343
+ inline_js[i].call(root, root.Bokeh);
344
+ }
345
+ if (force === true) {
346
+ display_loaded();
347
+ }} else if (Date.now() < root._bokeh_timeout) {
348
+ setTimeout(run_inline_js, 100);
349
+ } else if (!root._bokeh_failed_load) {
350
+ console.log("Bokeh: BokehJS failed to load within specified timeout.");
351
+ root._bokeh_failed_load = true;
352
+ } else if (force !== true) {
353
+ const cell = $(document.getElementById("1002")).parents('.cell').data().cell;
354
+ cell.output_area.append_execute_result(NB_LOAD_WARNING)
355
+ }
356
+ }
357
+
358
+ if (root._bokeh_is_loading === 0) {
359
+ console.debug("Bokeh: BokehJS loaded, going straight to plotting");
360
+ run_inline_js();
361
+ } else {
362
+ load_libs(css_urls, js_urls, function() {
363
+ console.debug("Bokeh: BokehJS plotting callback run at", now());
364
+ run_inline_js();
365
+ });
366
+ }
367
+ }(window));
368
+ </script>
369
+ </div>
370
+
371
+ </div>
372
+
373
+ </div>
374
+ </div>
375
+
376
+ </div>
377
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
378
+ <div class="text_cell_render border-box-sizing rendered_html">
379
+ <h3 id="Linked-Interactions">Linked Interactions<a class="anchor-link" href="#Linked-Interactions">&#182;</a></h3><p>It is possible to link various interactions between different Bokeh plots. For instance, the ranges of two (or more) plots can be linked, so that when one of the plots is panned (or zoomed, or otherwise has its range changed) the other plots will update in unison. It is also possible to link selections between two plots, so that when items are selected on one plot, the corresponding items on the second plot also become selected.</p>
380
+
381
+ </div>
382
+ </div>
383
+ </div>
384
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
385
+ <div class="text_cell_render border-box-sizing rendered_html">
386
+ <h4 id="Linked-panning">Linked panning<a class="anchor-link" href="#Linked-panning">&#182;</a></h4><p>Linked panning (when multiple plots have ranges that stay in sync) is simple to spell with Bokeh. You simply share the appropriate range objects between two (or more) plots. The example below shows how to accomplish this by linking the ranges of three plots in various ways:</p>
387
+
388
+ </div>
389
+ </div>
390
+ </div>
391
+
392
+
393
+
394
+ <div class="
395
+ cell border-box-sizing code_cell rendered">
396
+ <div class="input">
397
+
398
+ <div class="inner_cell">
399
+ <div class="input_area">
400
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from bokeh.layouts import gridplot</span>
401
+ </pre></div>
402
+
403
+ </div>
404
+ </div>
405
+ </div>
406
+
407
+ </div>
408
+
409
+
410
+
411
+ <div class="
412
+ cell border-box-sizing code_cell rendered">
413
+ <div class="input">
414
+
415
+ <div class="inner_cell">
416
+ <div class="input_area">
417
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">x</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">11</span><span class="p">))</span>
418
+ <span class="n">y0</span><span class="p">,</span> <span class="n">y1</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="p">[</span><span class="mi">10</span><span class="o">-</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">x</span><span class="p">],</span> <span class="p">[</span><span class="nb">abs</span><span class="p">(</span><span class="n">i</span><span class="o">-</span><span class="mi">5</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span>
419
+
420
+ <span class="n">plot_options</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
421
+ <span class="n">width</span><span class="o">=</span><span class="mi">250</span><span class="p">,</span>
422
+ <span class="n">plot_height</span><span class="o">=</span><span class="mi">250</span><span class="p">,</span>
423
+ <span class="n">tools</span><span class="o">=</span><span class="s1">&#39;pan, wheel_zoom, reset&#39;</span>
424
+ <span class="p">)</span>
425
+
426
+ <span class="c1"># create a new plot</span>
427
+ <span class="n">s1</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span><span class="o">**</span><span class="n">plot_options</span><span class="p">)</span>
428
+ <span class="n">s1</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;navy&quot;</span><span class="p">)</span>
429
+
430
+ <span class="c1"># create a new plot and share both ranges</span>
431
+ <span class="n">s2</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
432
+ <span class="n">x_range</span><span class="o">=</span><span class="n">s1</span><span class="o">.</span><span class="n">x_range</span><span class="p">,</span>
433
+ <span class="n">y_range</span><span class="o">=</span><span class="n">s1</span><span class="o">.</span><span class="n">y_range</span><span class="p">,</span>
434
+ <span class="o">**</span><span class="n">plot_options</span>
435
+ <span class="p">)</span>
436
+ <span class="n">s2</span><span class="o">.</span><span class="n">triangle</span><span class="p">(</span>
437
+ <span class="n">x</span><span class="p">,</span>
438
+ <span class="n">y1</span><span class="p">,</span>
439
+ <span class="n">size</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
440
+ <span class="n">color</span><span class="o">=</span><span class="s2">&quot;firebrick&quot;</span>
441
+ <span class="p">)</span>
442
+
443
+ <span class="c1"># create a new plot and share only one range</span>
444
+ <span class="n">s3</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
445
+ <span class="n">x_range</span><span class="o">=</span><span class="n">s1</span><span class="o">.</span><span class="n">x_range</span><span class="p">,</span>
446
+ <span class="o">**</span><span class="n">plot_options</span>
447
+ <span class="p">)</span>
448
+ <span class="n">s3</span><span class="o">.</span><span class="n">square</span><span class="p">(</span>
449
+ <span class="n">x</span><span class="p">,</span>
450
+ <span class="n">y2</span><span class="p">,</span>
451
+ <span class="n">size</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
452
+ <span class="n">color</span><span class="o">=</span><span class="s2">&quot;olive&quot;</span>
453
+ <span class="p">)</span>
454
+
455
+ <span class="n">p</span> <span class="o">=</span> <span class="n">gridplot</span><span class="p">(</span>
456
+ <span class="p">[[</span><span class="n">s1</span><span class="p">,</span> <span class="n">s2</span><span class="p">,</span> <span class="n">s3</span><span class="p">]]</span>
457
+ <span class="p">)</span>
458
+
459
+ <span class="c1"># show the results</span>
460
+ <span class="n">show</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
461
+ </pre></div>
462
+
463
+ </div>
464
+ </div>
465
+ </div>
466
+
467
+ <div class="output_wrapper">
468
+ <div class="output">
469
+
470
+
471
+ <div class="output_area">
472
+
473
+
474
+
475
+
476
+ <div class="output_html rendered_html output_subarea ">
477
+
478
+ <div class="bk-root" id="308e4ed4-8494-4e6d-9c43-0b6952ac0f20" data-root-id="1126"></div>
479
+
480
+ </div>
481
+
482
+ </div>
483
+
484
+ <div class="output_area">
485
+
486
+
487
+
488
+
489
+
490
+
491
+ <div id="5b9ec894-d86d-4246-8ce7-03cc6ba7c906"></div>
492
+ <div class="output_subarea output_javascript ">
493
+ <script type="text/javascript">
494
+ var element = $('#5b9ec894-d86d-4246-8ce7-03cc6ba7c906');
495
+ (function(root) {
496
+ function embed_document(root) {
497
+ const docs_json = {"04272af0-687d-4eec-bda1-1004eb86b657":{"defs":[],"roots":{"references":[{"attributes":{"children":[{"id":"1125"},{"id":"1123"}]},"id":"1126","type":"Column"},{"attributes":{},"id":"1115","type":"BasicTickFormatter"},{"attributes":{"coordinates":null,"group":null},"id":"1112","type":"Title"},{"attributes":{"tools":[{"id":"1020"},{"id":"1021"},{"id":"1022"}]},"id":"1023","type":"Toolbar"},{"attributes":{},"id":"1118","type":"BasicTickFormatter"},{"attributes":{},"id":"1119","type":"AllLabels"},{"attributes":{},"id":"1116","type":"AllLabels"},{"attributes":{},"id":"1120","type":"UnionRenderers"},{"attributes":{},"id":"1121","type":"Selection"},{"attributes":{"toolbar":{"id":"1124"},"toolbar_location":"above"},"id":"1125","type":"ToolbarBox"},{"attributes":{"toolbars":[{"id":"1023"},{"id":"1051"},{"id":"1080"}],"tools":[{"id":"1020"},{"id":"1021"},{"id":"1022"},{"id":"1048"},{"id":"1049"},{"id":"1050"},{"id":"1077"},{"id":"1078"},{"id":"1079"}]},"id":"1124","type":"ProxyToolbar"},{"attributes":{"axis":{"id":"1012"},"coordinates":null,"group":null,"ticker":null},"id":"1015","type":"Grid"},{"attributes":{},"id":"1022","type":"ResetTool"},{"attributes":{},"id":"1004","type":"DataRange1d"},{"attributes":{},"id":"1017","type":"BasicTicker"},{"attributes":{"coordinates":null,"formatter":{"id":"1093"},"group":null,"major_label_policy":{"id":"1094"},"ticker":{"id":"1017"}},"id":"1016","type":"LinearAxis"},{"attributes":{"tools":[{"id":"1077"},{"id":"1078"},{"id":"1079"}]},"id":"1080","type":"Toolbar"},{"attributes":{},"id":"1105","type":"AllLabels"},{"attributes":{"below":[{"id":"1040"}],"center":[{"id":"1043"},{"id":"1047"}],"height":250,"left":[{"id":"1044"}],"renderers":[{"id":"1059"}],"title":{"id":"1101"},"toolbar":{"id":"1051"},"toolbar_location":null,"width":250,"x_range":{"id":"1004"},"x_scale":{"id":"1036"},"y_range":{"id":"1006"},"y_scale":{"id":"1038"}},"id":"1033","subtype":"Figure","type":"Plot"},{"attributes":{"axis":{"id":"1044"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1047","type":"Grid"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"olive"},"hatch_alpha":{"value":0.2},"hatch_color":{"value":"olive"},"line_alpha":{"value":0.2},"line_color":{"value":"olive"},"marker":{"value":"square"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1087","type":"Scatter"},{"attributes":{},"id":"1107","type":"BasicTickFormatter"},{"attributes":{"tools":[{"id":"1048"},{"id":"1049"},{"id":"1050"}]},"id":"1051","type":"Toolbar"},{"attributes":{},"id":"1048","type":"PanTool"},{"attributes":{"coordinates":null,"data_source":{"id":"1055"},"glyph":{"id":"1056"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1058"},"nonselection_glyph":{"id":"1057"},"view":{"id":"1060"}},"id":"1059","type":"GlyphRenderer"},{"attributes":{},"id":"1021","type":"WheelZoomTool"},{"attributes":{},"id":"1049","type":"WheelZoomTool"},{"attributes":{},"id":"1050","type":"ResetTool"},{"attributes":{"fill_color":{"value":"olive"},"hatch_color":{"value":"olive"},"line_color":{"value":"olive"},"marker":{"value":"square"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1085","type":"Scatter"},{"attributes":{"axis":{"id":"1016"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1019","type":"Grid"},{"attributes":{"fill_color":{"value":"firebrick"},"hatch_color":{"value":"firebrick"},"line_color":{"value":"firebrick"},"marker":{"value":"triangle"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1056","type":"Scatter"},{"attributes":{"coordinates":null,"formatter":{"id":"1096"},"group":null,"major_label_policy":{"id":"1097"},"ticker":{"id":"1013"}},"id":"1012","type":"LinearAxis"},{"attributes":{"coordinates":null,"data_source":{"id":"1084"},"glyph":{"id":"1085"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1087"},"nonselection_glyph":{"id":"1086"},"view":{"id":"1089"}},"id":"1088","type":"GlyphRenderer"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"firebrick"},"hatch_alpha":{"value":0.2},"hatch_color":{"value":"firebrick"},"line_alpha":{"value":0.2},"line_color":{"value":"firebrick"},"marker":{"value":"triangle"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1058","type":"Scatter"},{"attributes":{"source":{"id":"1084"}},"id":"1089","type":"CDSView"},{"attributes":{},"id":"1110","type":"Selection"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"olive"},"hatch_alpha":{"value":0.1},"hatch_color":{"value":"olive"},"line_alpha":{"value":0.1},"line_color":{"value":"olive"},"marker":{"value":"square"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1086","type":"Scatter"},{"attributes":{"coordinates":null,"group":null},"id":"1090","type":"Title"},{"attributes":{"source":{"id":"1055"}},"id":"1060","type":"CDSView"},{"attributes":{},"id":"1008","type":"LinearScale"},{"attributes":{},"id":"1096","type":"BasicTickFormatter"},{"attributes":{"data":{"x":[0,1,2,3,4,5,6,7,8,9,10],"y":[10,9,8,7,6,5,4,3,2,1,0]},"selected":{"id":"1110"},"selection_policy":{"id":"1109"}},"id":"1055","type":"ColumnDataSource"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"firebrick"},"hatch_alpha":{"value":0.1},"hatch_color":{"value":"firebrick"},"line_alpha":{"value":0.1},"line_color":{"value":"firebrick"},"marker":{"value":"triangle"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1057","type":"Scatter"},{"attributes":{},"id":"1094","type":"AllLabels"},{"attributes":{},"id":"1063","type":"DataRange1d"},{"attributes":{},"id":"1093","type":"BasicTickFormatter"},{"attributes":{},"id":"1070","type":"BasicTicker"},{"attributes":{},"id":"1065","type":"LinearScale"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"navy"},"hatch_alpha":{"value":0.1},"hatch_color":{"value":"navy"},"line_alpha":{"value":0.1},"line_color":{"value":"navy"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1029","type":"Circle"},{"attributes":{},"id":"1097","type":"AllLabels"},{"attributes":{},"id":"1099","type":"Selection"},{"attributes":{"coordinates":null,"data_source":{"id":"1027"},"glyph":{"id":"1028"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1030"},"nonselection_glyph":{"id":"1029"},"view":{"id":"1032"}},"id":"1031","type":"GlyphRenderer"},{"attributes":{},"id":"1067","type":"LinearScale"},{"attributes":{"fill_color":{"value":"navy"},"hatch_color":{"value":"navy"},"line_color":{"value":"navy"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1028","type":"Circle"},{"attributes":{"coordinates":null,"formatter":{"id":"1118"},"group":null,"major_label_policy":{"id":"1119"},"ticker":{"id":"1070"}},"id":"1069","type":"LinearAxis"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"navy"},"hatch_alpha":{"value":0.2},"hatch_color":{"value":"navy"},"line_alpha":{"value":0.2},"line_color":{"value":"navy"},"size":{"value":10},"x":{"field":"x"},"y":{"field":"y"}},"id":"1030","type":"Circle"},{"attributes":{},"id":"1098","type":"UnionRenderers"},{"attributes":{"below":[{"id":"1069"}],"center":[{"id":"1072"},{"id":"1076"}],"height":250,"left":[{"id":"1073"}],"renderers":[{"id":"1088"}],"title":{"id":"1112"},"toolbar":{"id":"1080"},"toolbar_location":null,"width":250,"x_range":{"id":"1004"},"x_scale":{"id":"1065"},"y_range":{"id":"1063"},"y_scale":{"id":"1067"}},"id":"1061","subtype":"Figure","type":"Plot"},{"attributes":{"axis":{"id":"1069"},"coordinates":null,"group":null,"ticker":null},"id":"1072","type":"Grid"},{"attributes":{},"id":"1074","type":"BasicTicker"},{"attributes":{"coordinates":null,"formatter":{"id":"1115"},"group":null,"major_label_policy":{"id":"1116"},"ticker":{"id":"1074"}},"id":"1073","type":"LinearAxis"},{"attributes":{"source":{"id":"1027"}},"id":"1032","type":"CDSView"},{"attributes":{},"id":"1020","type":"PanTool"},{"attributes":{},"id":"1010","type":"LinearScale"},{"attributes":{"data":{"x":[0,1,2,3,4,5,6,7,8,9,10],"y":[0,1,2,3,4,5,6,7,8,9,10]},"selected":{"id":"1099"},"selection_policy":{"id":"1098"}},"id":"1027","type":"ColumnDataSource"},{"attributes":{},"id":"1041","type":"BasicTicker"},{"attributes":{},"id":"1013","type":"BasicTicker"},{"attributes":{},"id":"1036","type":"LinearScale"},{"attributes":{"axis":{"id":"1073"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1076","type":"Grid"},{"attributes":{"data":{"x":[0,1,2,3,4,5,6,7,8,9,10],"y":[5,4,3,2,1,0,1,2,3,4,5]},"selected":{"id":"1121"},"selection_policy":{"id":"1120"}},"id":"1084","type":"ColumnDataSource"},{"attributes":{"below":[{"id":"1012"}],"center":[{"id":"1015"},{"id":"1019"}],"height":250,"left":[{"id":"1016"}],"renderers":[{"id":"1031"}],"title":{"id":"1090"},"toolbar":{"id":"1023"},"toolbar_location":null,"width":250,"x_range":{"id":"1004"},"x_scale":{"id":"1008"},"y_range":{"id":"1006"},"y_scale":{"id":"1010"}},"id":"1003","subtype":"Figure","type":"Plot"},{"attributes":{"children":[[{"id":"1003"},0,0],[{"id":"1033"},0,1],[{"id":"1061"},0,2]]},"id":"1123","type":"GridBox"},{"attributes":{},"id":"1104","type":"BasicTickFormatter"},{"attributes":{},"id":"1038","type":"LinearScale"},{"attributes":{"coordinates":null,"group":null},"id":"1101","type":"Title"},{"attributes":{},"id":"1077","type":"PanTool"},{"attributes":{},"id":"1045","type":"BasicTicker"},{"attributes":{"coordinates":null,"formatter":{"id":"1107"},"group":null,"major_label_policy":{"id":"1108"},"ticker":{"id":"1041"}},"id":"1040","type":"LinearAxis"},{"attributes":{},"id":"1108","type":"AllLabels"},{"attributes":{},"id":"1078","type":"WheelZoomTool"},{"attributes":{},"id":"1079","type":"ResetTool"},{"attributes":{},"id":"1006","type":"DataRange1d"},{"attributes":{"axis":{"id":"1040"},"coordinates":null,"group":null,"ticker":null},"id":"1043","type":"Grid"},{"attributes":{},"id":"1109","type":"UnionRenderers"},{"attributes":{"coordinates":null,"formatter":{"id":"1104"},"group":null,"major_label_policy":{"id":"1105"},"ticker":{"id":"1045"}},"id":"1044","type":"LinearAxis"}],"root_ids":["1126"]},"title":"Bokeh Application","version":"2.4.3"}};
498
+ const render_items = [{"docid":"04272af0-687d-4eec-bda1-1004eb86b657","root_ids":["1126"],"roots":{"1126":"308e4ed4-8494-4e6d-9c43-0b6952ac0f20"}}];
499
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
500
+ }
501
+ if (root.Bokeh !== undefined) {
502
+ embed_document(root);
503
+ } else {
504
+ let attempts = 0;
505
+ const timer = setInterval(function(root) {
506
+ if (root.Bokeh !== undefined) {
507
+ clearInterval(timer);
508
+ embed_document(root);
509
+ } else {
510
+ attempts++;
511
+ if (attempts > 100) {
512
+ clearInterval(timer);
513
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
514
+ }
515
+ }
516
+ }, 10, root)
517
+ }
518
+ })(window);
519
+ </script>
520
+ </div>
521
+
522
+ </div>
523
+
524
+ </div>
525
+ </div>
526
+
527
+ </div>
528
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
529
+ <div class="text_cell_render border-box-sizing rendered_html">
530
+ <h4 id="Linked-brushing">Linked brushing<a class="anchor-link" href="#Linked-brushing">&#182;</a></h4><p>Linking selections is accomplished in a similar way, by sharing data sources between plots. Note that normally with <code>bokeh.plotting</code> and <code>bokeh.charts</code> creating a default data source for simple plots is handled automatically. However to share a data source, we must create them by hand and pass them explicitly. This is illustrated in the example below:</p>
531
+
532
+ </div>
533
+ </div>
534
+ </div>
535
+
536
+
537
+
538
+ <div class="
539
+ cell border-box-sizing code_cell rendered">
540
+ <div class="input">
541
+
542
+ <div class="inner_cell">
543
+ <div class="input_area">
544
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from bokeh.models import ColumnDataSource</span>
545
+ </pre></div>
546
+
547
+ </div>
548
+ </div>
549
+ </div>
550
+
551
+ </div>
552
+
553
+
554
+
555
+ <div class="
556
+ cell border-box-sizing code_cell rendered">
557
+ <div class="input">
558
+
559
+ <div class="inner_cell">
560
+ <div class="input_area">
561
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">x</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="o">-</span><span class="mi">20</span><span class="p">,</span> <span class="mi">21</span><span class="p">))</span>
562
+ <span class="n">y0</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="p">[</span><span class="nb">abs</span><span class="p">(</span><span class="n">xx</span><span class="p">)</span> <span class="k">for</span> <span class="n">xx</span> <span class="ow">in</span> <span class="n">x</span><span class="p">],</span> <span class="p">[</span><span class="n">xx</span><span class="o">**</span><span class="mi">2</span> <span class="k">for</span> <span class="n">xx</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span>
563
+
564
+ <span class="c1"># create a column data source for the plots to share</span>
565
+ <span class="n">source</span> <span class="o">=</span> <span class="n">ColumnDataSource</span><span class="p">(</span>
566
+ <span class="n">data</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
567
+ <span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span>
568
+ <span class="n">y0</span><span class="o">=</span><span class="n">y0</span><span class="p">,</span>
569
+ <span class="n">y1</span><span class="o">=</span><span class="n">y1</span>
570
+ <span class="p">)</span>
571
+ <span class="p">)</span>
572
+
573
+ <span class="n">TOOLS</span> <span class="o">=</span> <span class="s2">&quot;box_select, lasso_select, help, reset&quot;</span>
574
+
575
+ <span class="c1"># create a new plot and add a renderer</span>
576
+ <span class="n">left</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
577
+ <span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
578
+ <span class="n">height</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
579
+ <span class="n">tools</span><span class="o">=</span><span class="n">TOOLS</span>
580
+ <span class="p">)</span>
581
+ <span class="n">left</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span>
582
+ <span class="s1">&#39;x&#39;</span><span class="p">,</span>
583
+ <span class="s1">&#39;y0&#39;</span><span class="p">,</span>
584
+ <span class="n">source</span><span class="o">=</span><span class="n">source</span>
585
+ <span class="p">)</span>
586
+
587
+ <span class="c1"># create another new plot and add a renderer</span>
588
+ <span class="n">right</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
589
+ <span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
590
+ <span class="n">height</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
591
+ <span class="n">tools</span><span class="o">=</span><span class="n">TOOLS</span>
592
+ <span class="p">)</span>
593
+ <span class="n">right</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span>
594
+ <span class="s1">&#39;x&#39;</span><span class="p">,</span>
595
+ <span class="s1">&#39;y1&#39;</span><span class="p">,</span>
596
+ <span class="n">source</span><span class="o">=</span><span class="n">source</span>
597
+ <span class="p">)</span>
598
+
599
+ <span class="n">p</span> <span class="o">=</span> <span class="n">gridplot</span><span class="p">(</span>
600
+ <span class="p">[[</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">]]</span>
601
+ <span class="p">)</span>
602
+
603
+ <span class="c1"># show the results</span>
604
+ <span class="n">show</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
605
+ </pre></div>
606
+
607
+ </div>
608
+ </div>
609
+ </div>
610
+
611
+ <div class="output_wrapper">
612
+ <div class="output">
613
+
614
+
615
+ <div class="output_area">
616
+
617
+
618
+
619
+
620
+ <div class="output_html rendered_html output_subarea ">
621
+
622
+ <div class="bk-root" id="ded72a6f-e361-48c0-9c62-52ad12e55591" data-root-id="1405"></div>
623
+
624
+ </div>
625
+
626
+ </div>
627
+
628
+ <div class="output_area">
629
+
630
+
631
+
632
+
633
+
634
+
635
+ <div id="82f8dde7-4bb0-4bfd-ab77-383b4799b706"></div>
636
+ <div class="output_subarea output_javascript ">
637
+ <script type="text/javascript">
638
+ var element = $('#82f8dde7-4bb0-4bfd-ab77-383b4799b706');
639
+ (function(root) {
640
+ function embed_document(root) {
641
+ const docs_json = {"ac0f847d-4cf4-4e37-a5ef-fea3652049c2":{"defs":[],"roots":{"references":[{"attributes":{"children":[{"id":"1404"},{"id":"1402"}]},"id":"1405","type":"Column"},{"attributes":{"axis":{"id":"1317"},"coordinates":null,"group":null,"ticker":null},"id":"1320","type":"Grid"},{"attributes":{"toolbar":{"id":"1403"},"toolbar_location":"above"},"id":"1404","type":"ToolbarBox"},{"attributes":{"tools":[{"id":"1359"},{"id":"1360"},{"id":"1361"},{"id":"1362"}]},"id":"1365","type":"Toolbar"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.2},"line_alpha":{"value":0.2},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y0"}},"id":"1339","type":"Circle"},{"attributes":{},"id":"1322","type":"BasicTicker"},{"attributes":{"overlay":{"id":"1363"}},"id":"1359","type":"BoxSelectTool"},{"attributes":{"coordinates":null,"formatter":{"id":"1379"},"group":null,"major_label_policy":{"id":"1380"},"ticker":{"id":"1322"}},"id":"1321","type":"LinearAxis"},{"attributes":{"coordinates":null,"formatter":{"id":"1382"},"group":null,"major_label_policy":{"id":"1383"},"ticker":{"id":"1318"}},"id":"1317","type":"LinearAxis"},{"attributes":{"overlay":{"id":"1364"}},"id":"1360","type":"LassoSelectTool"},{"attributes":{"children":[[{"id":"1308"},0,0],[{"id":"1342"},0,1]]},"id":"1402","type":"GridBox"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.2},"line_alpha":{"value":0.2},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y1"}},"id":"1373","type":"Circle"},{"attributes":{},"id":"1361","type":"HelpTool"},{"attributes":{"coordinates":null,"data_source":{"id":"1307"},"glyph":{"id":"1337"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1339"},"nonselection_glyph":{"id":"1338"},"view":{"id":"1341"}},"id":"1340","type":"GlyphRenderer"},{"attributes":{"coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"syncable":false,"xs_units":"screen","ys_units":"screen"},"id":"1330","type":"PolyAnnotation"},{"attributes":{},"id":"1362","type":"ResetTool"},{"attributes":{"coordinates":null,"formatter":{"id":"1395"},"group":null,"major_label_policy":{"id":"1396"},"ticker":{"id":"1352"}},"id":"1351","type":"LinearAxis"},{"attributes":{"coordinates":null,"group":null},"id":"1376","type":"Title"},{"attributes":{"data":{"x":[-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"y0":[20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"y1":[400,361,324,289,256,225,196,169,144,121,100,81,64,49,36,25,16,9,4,1,0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400]},"selected":{"id":"1385"},"selection_policy":{"id":"1384"}},"id":"1307","type":"ColumnDataSource"},{"attributes":{},"id":"1380","type":"AllLabels"},{"attributes":{"axis":{"id":"1321"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1324","type":"Grid"},{"attributes":{},"id":"1382","type":"BasicTickFormatter"},{"attributes":{"below":[{"id":"1317"}],"center":[{"id":"1320"},{"id":"1324"}],"height":300,"left":[{"id":"1321"}],"renderers":[{"id":"1340"}],"title":{"id":"1376"},"toolbar":{"id":"1331"},"toolbar_location":null,"width":400,"x_range":{"id":"1309"},"x_scale":{"id":"1313"},"y_range":{"id":"1311"},"y_scale":{"id":"1315"}},"id":"1308","subtype":"Figure","type":"Plot"},{"attributes":{"toolbars":[{"id":"1331"},{"id":"1365"}],"tools":[{"id":"1325"},{"id":"1326"},{"id":"1327"},{"id":"1328"},{"id":"1359"},{"id":"1360"},{"id":"1361"},{"id":"1362"}]},"id":"1403","type":"ProxyToolbar"},{"attributes":{},"id":"1379","type":"BasicTickFormatter"},{"attributes":{},"id":"1352","type":"BasicTicker"},{"attributes":{"bottom_units":"screen","coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"left_units":"screen","level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"right_units":"screen","syncable":false,"top_units":"screen"},"id":"1329","type":"BoxAnnotation"},{"attributes":{},"id":"1393","type":"AllLabels"},{"attributes":{},"id":"1383","type":"AllLabels"},{"attributes":{"below":[{"id":"1351"}],"center":[{"id":"1354"},{"id":"1358"}],"height":300,"left":[{"id":"1355"}],"renderers":[{"id":"1374"}],"title":{"id":"1389"},"toolbar":{"id":"1365"},"toolbar_location":null,"width":400,"x_range":{"id":"1343"},"x_scale":{"id":"1347"},"y_range":{"id":"1345"},"y_scale":{"id":"1349"}},"id":"1342","subtype":"Figure","type":"Plot"},{"attributes":{},"id":"1345","type":"DataRange1d"},{"attributes":{"axis":{"id":"1351"},"coordinates":null,"group":null,"ticker":null},"id":"1354","type":"Grid"},{"attributes":{"overlay":{"id":"1329"}},"id":"1325","type":"BoxSelectTool"},{"attributes":{},"id":"1384","type":"UnionRenderers"},{"attributes":{"overlay":{"id":"1330"}},"id":"1326","type":"LassoSelectTool"},{"attributes":{"bottom_units":"screen","coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"left_units":"screen","level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"right_units":"screen","syncable":false,"top_units":"screen"},"id":"1363","type":"BoxAnnotation"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.1},"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y1"}},"id":"1372","type":"Circle"},{"attributes":{},"id":"1327","type":"HelpTool"},{"attributes":{"fill_color":{"value":"#1f77b4"},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y0"}},"id":"1337","type":"Circle"},{"attributes":{},"id":"1396","type":"AllLabels"},{"attributes":{},"id":"1328","type":"ResetTool"},{"attributes":{"coordinates":null,"data_source":{"id":"1307"},"glyph":{"id":"1371"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1373"},"nonselection_glyph":{"id":"1372"},"view":{"id":"1375"}},"id":"1374","type":"GlyphRenderer"},{"attributes":{},"id":"1385","type":"Selection"},{"attributes":{},"id":"1309","type":"DataRange1d"},{"attributes":{},"id":"1311","type":"DataRange1d"},{"attributes":{"source":{"id":"1307"}},"id":"1341","type":"CDSView"},{"attributes":{},"id":"1356","type":"BasicTicker"},{"attributes":{"coordinates":null,"formatter":{"id":"1392"},"group":null,"major_label_policy":{"id":"1393"},"ticker":{"id":"1356"}},"id":"1355","type":"LinearAxis"},{"attributes":{},"id":"1347","type":"LinearScale"},{"attributes":{"coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"syncable":false,"xs_units":"screen","ys_units":"screen"},"id":"1364","type":"PolyAnnotation"},{"attributes":{"fill_color":{"value":"#1f77b4"},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y1"}},"id":"1371","type":"Circle"},{"attributes":{},"id":"1392","type":"BasicTickFormatter"},{"attributes":{},"id":"1349","type":"LinearScale"},{"attributes":{},"id":"1318","type":"BasicTicker"},{"attributes":{"source":{"id":"1307"}},"id":"1375","type":"CDSView"},{"attributes":{},"id":"1343","type":"DataRange1d"},{"attributes":{},"id":"1313","type":"LinearScale"},{"attributes":{"coordinates":null,"group":null},"id":"1389","type":"Title"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.1},"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y0"}},"id":"1338","type":"Circle"},{"attributes":{},"id":"1315","type":"LinearScale"},{"attributes":{},"id":"1395","type":"BasicTickFormatter"},{"attributes":{"axis":{"id":"1355"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1358","type":"Grid"},{"attributes":{"tools":[{"id":"1325"},{"id":"1326"},{"id":"1327"},{"id":"1328"}]},"id":"1331","type":"Toolbar"}],"root_ids":["1405"]},"title":"Bokeh Application","version":"2.4.3"}};
642
+ const render_items = [{"docid":"ac0f847d-4cf4-4e37-a5ef-fea3652049c2","root_ids":["1405"],"roots":{"1405":"ded72a6f-e361-48c0-9c62-52ad12e55591"}}];
643
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
644
+ }
645
+ if (root.Bokeh !== undefined) {
646
+ embed_document(root);
647
+ } else {
648
+ let attempts = 0;
649
+ const timer = setInterval(function(root) {
650
+ if (root.Bokeh !== undefined) {
651
+ clearInterval(timer);
652
+ embed_document(root);
653
+ } else {
654
+ attempts++;
655
+ if (attempts > 100) {
656
+ clearInterval(timer);
657
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
658
+ }
659
+ }
660
+ }, 10, root)
661
+ }
662
+ })(window);
663
+ </script>
664
+ </div>
665
+
666
+ </div>
667
+
668
+ </div>
669
+ </div>
670
+
671
+ </div>
672
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
673
+ <div class="text_cell_render border-box-sizing rendered_html">
674
+ <h3 id="Hover-Tools">Hover Tools<a class="anchor-link" href="#Hover-Tools">&#182;</a></h3><p>Bokeh has a Hover Tool that allows additional information to be displayed in a popup whenever the user hovers over a specific glyph. Basic hover tool configuration amounts to providing a list of <code>(name, format)</code> tuples. The full details can be found in the User's Guide <a href="https://bokeh.pydata.org/en/latest/docs/user_guide/tools.html#hovertool">here</a>.
675
+ The example below shows some basic usage of the Hover tool with a circle glyph, using hover information defined in utils.py:</p>
676
+
677
+ </div>
678
+ </div>
679
+ </div>
680
+
681
+
682
+
683
+ <div class="
684
+ cell border-box-sizing code_cell rendered">
685
+ <div class="input">
686
+
687
+ <div class="inner_cell">
688
+ <div class="input_area">
689
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from bokeh.models import HoverTool</span>
690
+ </pre></div>
691
+
692
+ </div>
693
+ </div>
694
+ </div>
695
+
696
+ </div>
697
+
698
+
699
+
700
+ <div class="
701
+ cell border-box-sizing code_cell rendered">
702
+ <div class="input">
703
+
704
+ <div class="inner_cell">
705
+ <div class="input_area">
706
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">source</span> <span class="o">=</span> <span class="n">ColumnDataSource</span><span class="p">(</span>
707
+ <span class="n">data</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
708
+ <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
709
+ <span class="n">y</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">7</span><span class="p">],</span>
710
+ <span class="n">desc</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">],</span>
711
+ <span class="p">)</span>
712
+ <span class="p">)</span>
713
+
714
+ <span class="n">hover</span> <span class="o">=</span> <span class="n">HoverTool</span><span class="p">(</span>
715
+ <span class="n">tooltips</span><span class="o">=</span><span class="p">[</span>
716
+ <span class="p">(</span><span class="s2">&quot;index&quot;</span><span class="p">,</span> <span class="s2">&quot;$index&quot;</span><span class="p">),</span>
717
+ <span class="p">(</span><span class="s2">&quot;(x,y)&quot;</span><span class="p">,</span> <span class="s2">&quot;($x, $y)&quot;</span><span class="p">),</span>
718
+ <span class="p">(</span><span class="s2">&quot;desc&quot;</span><span class="p">,</span> <span class="s2">&quot;@desc&quot;</span><span class="p">),</span>
719
+ <span class="p">]</span>
720
+ <span class="p">)</span>
721
+
722
+ <span class="n">p</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
723
+ <span class="n">plot_height</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
724
+ <span class="n">plot_width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
725
+ <span class="n">tools</span><span class="o">=</span><span class="p">[</span><span class="n">hover</span><span class="p">],</span>
726
+ <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Mouse over the dots&quot;</span>
727
+ <span class="p">)</span>
728
+
729
+ <span class="n">p</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span>
730
+ <span class="s1">&#39;x&#39;</span><span class="p">,</span>
731
+ <span class="s1">&#39;y&#39;</span><span class="p">,</span>
732
+ <span class="n">size</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
733
+ <span class="n">source</span><span class="o">=</span><span class="n">source</span>
734
+ <span class="p">)</span>
735
+
736
+ <span class="c1"># show the results</span>
737
+ <span class="n">show</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
738
+ </pre></div>
739
+
740
+ </div>
741
+ </div>
742
+ </div>
743
+
744
+ <div class="output_wrapper">
745
+ <div class="output">
746
+
747
+
748
+ <div class="output_area">
749
+
750
+
751
+
752
+
753
+ <div class="output_html rendered_html output_subarea ">
754
+
755
+ <div class="bk-root" id="a2e0cfa6-7d08-479c-934e-0c4f1fd1766e" data-root-id="1570"></div>
756
+
757
+ </div>
758
+
759
+ </div>
760
+
761
+ <div class="output_area">
762
+
763
+
764
+
765
+
766
+
767
+
768
+ <div id="fac5149a-e6e7-4cd3-8b4a-750d1412a6b9"></div>
769
+ <div class="output_subarea output_javascript ">
770
+ <script type="text/javascript">
771
+ var element = $('#fac5149a-e6e7-4cd3-8b4a-750d1412a6b9');
772
+ (function(root) {
773
+ function embed_document(root) {
774
+ const docs_json = {"79ce7deb-49c3-48cd-8a0e-69e9a2868047":{"defs":[],"roots":{"references":[{"attributes":{"below":[{"id":"1581"}],"center":[{"id":"1584"},{"id":"1588"}],"height":300,"left":[{"id":"1585"}],"renderers":[{"id":"1595"}],"title":{"id":"1571"},"toolbar":{"id":"1589"},"width":800,"x_range":{"id":"1573"},"x_scale":{"id":"1577"},"y_range":{"id":"1575"},"y_scale":{"id":"1579"}},"id":"1570","subtype":"Figure","type":"Plot"},{"attributes":{},"id":"1573","type":"DataRange1d"},{"attributes":{"source":{"id":"1568"}},"id":"1596","type":"CDSView"},{"attributes":{},"id":"1654","type":"BasicTickFormatter"},{"attributes":{"tools":[{"id":"1569"}]},"id":"1589","type":"Toolbar"},{"attributes":{},"id":"1575","type":"DataRange1d"},{"attributes":{"coordinates":null,"group":null,"text":"Mouse over the dots"},"id":"1571","type":"Title"},{"attributes":{"coordinates":null,"data_source":{"id":"1568"},"glyph":{"id":"1592"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1594"},"nonselection_glyph":{"id":"1593"},"view":{"id":"1596"}},"id":"1595","type":"GlyphRenderer"},{"attributes":{},"id":"1656","type":"UnionRenderers"},{"attributes":{},"id":"1651","type":"BasicTickFormatter"},{"attributes":{},"id":"1652","type":"AllLabels"},{"attributes":{},"id":"1582","type":"BasicTicker"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.1},"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"size":{"value":20},"x":{"field":"x"},"y":{"field":"y"}},"id":"1593","type":"Circle"},{"attributes":{},"id":"1577","type":"LinearScale"},{"attributes":{},"id":"1579","type":"LinearScale"},{"attributes":{"fill_color":{"value":"#1f77b4"},"line_color":{"value":"#1f77b4"},"size":{"value":20},"x":{"field":"x"},"y":{"field":"y"}},"id":"1592","type":"Circle"},{"attributes":{"coordinates":null,"formatter":{"id":"1654"},"group":null,"major_label_policy":{"id":"1655"},"ticker":{"id":"1582"}},"id":"1581","type":"LinearAxis"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.2},"line_alpha":{"value":0.2},"line_color":{"value":"#1f77b4"},"size":{"value":20},"x":{"field":"x"},"y":{"field":"y"}},"id":"1594","type":"Circle"},{"attributes":{"axis":{"id":"1581"},"coordinates":null,"group":null,"ticker":null},"id":"1584","type":"Grid"},{"attributes":{},"id":"1586","type":"BasicTicker"},{"attributes":{"coordinates":null,"formatter":{"id":"1651"},"group":null,"major_label_policy":{"id":"1652"},"ticker":{"id":"1586"}},"id":"1585","type":"LinearAxis"},{"attributes":{},"id":"1655","type":"AllLabels"},{"attributes":{"callback":null,"tooltips":[["index","$index"],["(x,y)","($x, $y)"],["desc","@desc"]]},"id":"1569","type":"HoverTool"},{"attributes":{"data":{"desc":["A","b","C","d","E"],"x":[1,2,3,4,5],"y":[2,5,8,2,7]},"selected":{"id":"1657"},"selection_policy":{"id":"1656"}},"id":"1568","type":"ColumnDataSource"},{"attributes":{"axis":{"id":"1585"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1588","type":"Grid"},{"attributes":{},"id":"1657","type":"Selection"}],"root_ids":["1570"]},"title":"Bokeh Application","version":"2.4.3"}};
775
+ const render_items = [{"docid":"79ce7deb-49c3-48cd-8a0e-69e9a2868047","root_ids":["1570"],"roots":{"1570":"a2e0cfa6-7d08-479c-934e-0c4f1fd1766e"}}];
776
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
777
+ }
778
+ if (root.Bokeh !== undefined) {
779
+ embed_document(root);
780
+ } else {
781
+ let attempts = 0;
782
+ const timer = setInterval(function(root) {
783
+ if (root.Bokeh !== undefined) {
784
+ clearInterval(timer);
785
+ embed_document(root);
786
+ } else {
787
+ attempts++;
788
+ if (attempts > 100) {
789
+ clearInterval(timer);
790
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
791
+ }
792
+ }
793
+ }, 10, root)
794
+ }
795
+ })(window);
796
+ </script>
797
+ </div>
798
+
799
+ </div>
800
+
801
+ </div>
802
+ </div>
803
+
804
+ </div>
805
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
806
+ <div class="text_cell_render border-box-sizing rendered_html">
807
+ <h3 id="Widgets">Widgets<a class="anchor-link" href="#Widgets">&#182;</a></h3>
808
+ </div>
809
+ </div>
810
+ </div>
811
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
812
+ <div class="text_cell_render border-box-sizing rendered_html">
813
+ <p>Bokeh supports direct integration with a small basic widget set. These can be used in conjunction with a Bokeh Server, or with <code>CustomJS</code> models to add more interactive capability to your documents. You can see a complete list, with example code in the <a href="https://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html#adding-widgets">Adding Widgets</a> section of the User's Guide.</p>
814
+ <p><em>NOTE: In this Tutorial chapter, we will focus on using widgets with JavaScript callbacks. The Tutorial chapter on Bokeh server applications covers using Bokeh widgets with real Python callbacks</em></p>
815
+ <p>To use the widgets, include them in a layout like you would a plot object:</p>
816
+
817
+ </div>
818
+ </div>
819
+ </div>
820
+
821
+
822
+
823
+ <div class="
824
+ cell border-box-sizing code_cell rendered">
825
+ <div class="input">
826
+
827
+ <div class="inner_cell">
828
+ <div class="input_area">
829
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from bokeh.models.widgets import Slider</span>
830
+ </pre></div>
831
+
832
+ </div>
833
+ </div>
834
+ </div>
835
+
836
+ </div>
837
+
838
+
839
+
840
+ <div class="
841
+ cell border-box-sizing code_cell rendered">
842
+ <div class="input">
843
+
844
+ <div class="inner_cell">
845
+ <div class="input_area">
846
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">slider</span> <span class="o">=</span> <span class="n">Slider</span><span class="p">(</span>
847
+ <span class="n">start</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
848
+ <span class="n">end</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
849
+ <span class="n">value</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
850
+ <span class="n">step</span><span class="o">=</span><span class="mf">.1</span><span class="p">,</span>
851
+ <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Slider, value&quot;</span><span class="p">)</span>
852
+
853
+ <span class="n">show</span><span class="p">(</span><span class="n">slider</span><span class="p">)</span>
854
+ </pre></div>
855
+
856
+ </div>
857
+ </div>
858
+ </div>
859
+
860
+ <div class="output_wrapper">
861
+ <div class="output">
862
+
863
+
864
+ <div class="output_area">
865
+
866
+
867
+
868
+
869
+ <div class="output_html rendered_html output_subarea ">
870
+
871
+ <div class="bk-root" id="ae094e54-9404-45c7-8a33-c8b405b924ab" data-root-id="1703"></div>
872
+
873
+ </div>
874
+
875
+ </div>
876
+
877
+ <div class="output_area">
878
+
879
+
880
+
881
+
882
+
883
+
884
+ <div id="56622675-7093-46a6-967f-084a825aa988"></div>
885
+ <div class="output_subarea output_javascript ">
886
+ <script type="text/javascript">
887
+ var element = $('#56622675-7093-46a6-967f-084a825aa988');
888
+ (function(root) {
889
+ function embed_document(root) {
890
+ const docs_json = {"e56d704a-17e3-456d-b9df-2a6aa20d67b3":{"defs":[],"roots":{"references":[{"attributes":{"end":10,"start":0,"step":0.1,"title":"Slider, value","value":1},"id":"1703","type":"Slider"}],"root_ids":["1703"]},"title":"Bokeh Application","version":"2.4.3"}};
891
+ const render_items = [{"docid":"e56d704a-17e3-456d-b9df-2a6aa20d67b3","root_ids":["1703"],"roots":{"1703":"ae094e54-9404-45c7-8a33-c8b405b924ab"}}];
892
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
893
+ }
894
+ if (root.Bokeh !== undefined) {
895
+ embed_document(root);
896
+ } else {
897
+ let attempts = 0;
898
+ const timer = setInterval(function(root) {
899
+ if (root.Bokeh !== undefined) {
900
+ clearInterval(timer);
901
+ embed_document(root);
902
+ } else {
903
+ attempts++;
904
+ if (attempts > 100) {
905
+ clearInterval(timer);
906
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
907
+ }
908
+ }
909
+ }, 10, root)
910
+ }
911
+ })(window);
912
+ </script>
913
+ </div>
914
+
915
+ </div>
916
+
917
+ </div>
918
+ </div>
919
+
920
+ </div>
921
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
922
+ <div class="text_cell_render border-box-sizing rendered_html">
923
+ <h3 id="CustomJS-Callbacks">CustomJS Callbacks<a class="anchor-link" href="#CustomJS-Callbacks">&#182;</a></h3><p>In order for a widget to be useful, it needs to be able to perform some action. Using the Bokeh server, it is possible to have widgets trigger real Python code. That possibility will be explored in the Bokeh server chapter of the tutorial. Here, we look at how widgets can be configured with <code>CustomJS</code> callbacks that execute snippets of JavaScript code.</p>
924
+
925
+ </div>
926
+ </div>
927
+ </div>
928
+
929
+
930
+
931
+ <div class="
932
+ cell border-box-sizing code_cell rendered">
933
+ <div class="input">
934
+
935
+ <div class="inner_cell">
936
+ <div class="input_area">
937
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from bokeh.models import TapTool, CustomJS, ColumnDataSource</span>
938
+ </pre></div>
939
+
940
+ </div>
941
+ </div>
942
+ </div>
943
+
944
+ </div>
945
+
946
+
947
+
948
+ <div class="
949
+ cell border-box-sizing code_cell rendered">
950
+ <div class="input">
951
+
952
+ <div class="inner_cell">
953
+ <div class="input_area">
954
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">callback</span> <span class="o">=</span> <span class="n">CustomJS</span><span class="p">(</span>
955
+ <span class="n">code</span><span class="o">=</span><span class="s2">&quot;alert(&#39;you tapped a circle!&#39;)&quot;</span>
956
+ <span class="p">)</span>
957
+
958
+ <span class="n">tap</span> <span class="o">=</span> <span class="n">TapTool</span><span class="p">(</span>
959
+ <span class="n">callback</span><span class="o">=</span><span class="n">callback</span>
960
+ <span class="p">)</span>
961
+
962
+ <span class="n">p</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
963
+ <span class="n">plot_height</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
964
+ <span class="n">plot_width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
965
+ <span class="n">tools</span><span class="o">=</span><span class="p">[</span><span class="n">tap</span><span class="p">,</span> <span class="s2">&quot;reset&quot;</span><span class="p">]</span>
966
+ <span class="p">)</span>
967
+
968
+ <span class="n">p</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span>
969
+ <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
970
+ <span class="n">y</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">7</span><span class="p">],</span>
971
+ <span class="n">size</span><span class="o">=</span><span class="mi">20</span>
972
+ <span class="p">)</span>
973
+
974
+ <span class="c1"># show the results</span>
975
+ <span class="n">show</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
976
+ </pre></div>
977
+
978
+ </div>
979
+ </div>
980
+ </div>
981
+
982
+ <div class="output_wrapper">
983
+ <div class="output">
984
+
985
+
986
+ <div class="output_area">
987
+
988
+
989
+
990
+
991
+ <div class="output_html rendered_html output_subarea ">
992
+
993
+ <div class="bk-root" id="4564b7d9-0ce2-4120-ba34-336b74bae937" data-root-id="1767"></div>
994
+
995
+ </div>
996
+
997
+ </div>
998
+
999
+ <div class="output_area">
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+ <div id="95db9542-5a09-41c0-b0ca-11151f0d8304"></div>
1007
+ <div class="output_subarea output_javascript ">
1008
+ <script type="text/javascript">
1009
+ var element = $('#95db9542-5a09-41c0-b0ca-11151f0d8304');
1010
+ (function(root) {
1011
+ function embed_document(root) {
1012
+ const docs_json = {"5eab54ad-792e-4bf2-93e7-a75a5333c994":{"defs":[],"roots":{"references":[{"attributes":{"below":[{"id":"1776"}],"center":[{"id":"1779"},{"id":"1783"}],"height":400,"left":[{"id":"1780"}],"renderers":[{"id":"1792"}],"title":{"id":"1855"},"toolbar":{"id":"1785"},"width":800,"x_range":{"id":"1768"},"x_scale":{"id":"1772"},"y_range":{"id":"1770"},"y_scale":{"id":"1774"}},"id":"1767","subtype":"Figure","type":"Plot"},{"attributes":{},"id":"1784","type":"ResetTool"},{"attributes":{},"id":"1858","type":"BasicTickFormatter"},{"attributes":{"coordinates":null,"group":null},"id":"1855","type":"Title"},{"attributes":{},"id":"1768","type":"DataRange1d"},{"attributes":{"code":"alert('you tapped a circle!')"},"id":"1765","type":"CustomJS"},{"attributes":{"tools":[{"id":"1766"},{"id":"1784"}]},"id":"1785","type":"Toolbar"},{"attributes":{},"id":"1770","type":"DataRange1d"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.2},"line_alpha":{"value":0.2},"line_color":{"value":"#1f77b4"},"size":{"value":20},"x":{"field":"x"},"y":{"field":"y"}},"id":"1791","type":"Circle"},{"attributes":{},"id":"1861","type":"BasicTickFormatter"},{"attributes":{},"id":"1859","type":"AllLabels"},{"attributes":{},"id":"1777","type":"BasicTicker"},{"attributes":{},"id":"1864","type":"Selection"},{"attributes":{"coordinates":null,"data_source":{"id":"1788"},"glyph":{"id":"1789"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1791"},"nonselection_glyph":{"id":"1790"},"view":{"id":"1793"}},"id":"1792","type":"GlyphRenderer"},{"attributes":{},"id":"1772","type":"LinearScale"},{"attributes":{},"id":"1774","type":"LinearScale"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.1},"line_alpha":{"value":0.1},"line_color":{"value":"#1f77b4"},"size":{"value":20},"x":{"field":"x"},"y":{"field":"y"}},"id":"1790","type":"Circle"},{"attributes":{},"id":"1862","type":"AllLabels"},{"attributes":{"coordinates":null,"formatter":{"id":"1861"},"group":null,"major_label_policy":{"id":"1862"},"ticker":{"id":"1777"}},"id":"1776","type":"LinearAxis"},{"attributes":{"axis":{"id":"1776"},"coordinates":null,"group":null,"ticker":null},"id":"1779","type":"Grid"},{"attributes":{"source":{"id":"1788"}},"id":"1793","type":"CDSView"},{"attributes":{},"id":"1781","type":"BasicTicker"},{"attributes":{"coordinates":null,"formatter":{"id":"1858"},"group":null,"major_label_policy":{"id":"1859"},"ticker":{"id":"1781"}},"id":"1780","type":"LinearAxis"},{"attributes":{"data":{"x":[1,2,3,4,5],"y":[2,5,8,2,7]},"selected":{"id":"1864"},"selection_policy":{"id":"1863"}},"id":"1788","type":"ColumnDataSource"},{"attributes":{"callback":{"id":"1765"}},"id":"1766","type":"TapTool"},{"attributes":{},"id":"1863","type":"UnionRenderers"},{"attributes":{"axis":{"id":"1780"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1783","type":"Grid"},{"attributes":{"fill_color":{"value":"#1f77b4"},"line_color":{"value":"#1f77b4"},"size":{"value":20},"x":{"field":"x"},"y":{"field":"y"}},"id":"1789","type":"Circle"}],"root_ids":["1767"]},"title":"Bokeh Application","version":"2.4.3"}};
1013
+ const render_items = [{"docid":"5eab54ad-792e-4bf2-93e7-a75a5333c994","root_ids":["1767"],"roots":{"1767":"4564b7d9-0ce2-4120-ba34-336b74bae937"}}];
1014
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
1015
+ }
1016
+ if (root.Bokeh !== undefined) {
1017
+ embed_document(root);
1018
+ } else {
1019
+ let attempts = 0;
1020
+ const timer = setInterval(function(root) {
1021
+ if (root.Bokeh !== undefined) {
1022
+ clearInterval(timer);
1023
+ embed_document(root);
1024
+ } else {
1025
+ attempts++;
1026
+ if (attempts > 100) {
1027
+ clearInterval(timer);
1028
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
1029
+ }
1030
+ }
1031
+ }, 10, root)
1032
+ }
1033
+ })(window);
1034
+ </script>
1035
+ </div>
1036
+
1037
+ </div>
1038
+
1039
+ </div>
1040
+ </div>
1041
+
1042
+ </div>
1043
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1044
+ <div class="text_cell_render border-box-sizing rendered_html">
1045
+ <p>Bokeh objects that have values associated can have small JavaScript actions attached to them using the <code>js_on_change</code> method. These actions (also referred to as "callbacks") are executed whenever the widget's value is changed. In order to make it easier to refer to specific Bokeh models (e.g., a data source, or a glyph) from JavaScript, the <code>CustomJS</code> object also accepts a dictionary of "args" that map names to Python Bokeh models. The corresponding JavaScript models are made available automatically to the <code>CustomJS</code> code:</p>
1046
+ <div class="highlight"><pre><span></span><span class="n">CustomJS</span><span class="p">(</span>
1047
+ <span class="n">args</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
1048
+ <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
1049
+ <span class="n">slider</span><span class="o">=</span><span class="n">slider</span>
1050
+ <span class="p">),</span>
1051
+ <span class="n">code</span><span class="o">=</span><span class="s2">&quot;&quot;&quot;</span>
1052
+ <span class="s2"> // easily refer to BokehJS source and slider objects in this JS code</span>
1053
+ <span class="s2"> var data = source.data;</span>
1054
+ <span class="s2"> var f = slider.value;</span>
1055
+ <span class="s2"> &quot;&quot;&quot;</span>
1056
+ <span class="p">)</span>
1057
+ </pre></div>
1058
+
1059
+ </div>
1060
+ </div>
1061
+ </div>
1062
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1063
+ <div class="text_cell_render border-box-sizing rendered_html">
1064
+ <h4 id="Slider-widget-example">Slider widget example<a class="anchor-link" href="#Slider-widget-example">&#182;</a></h4><p>The example below shows an action attached to a slider that updates a data source whenever the slider is moved.</p>
1065
+
1066
+ </div>
1067
+ </div>
1068
+ </div>
1069
+
1070
+
1071
+
1072
+ <div class="
1073
+ cell border-box-sizing code_cell rendered">
1074
+ <div class="input">
1075
+
1076
+ <div class="inner_cell">
1077
+ <div class="input_area">
1078
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from bokeh.layouts import column</span>
1079
+ <span class="c1"># from bokeh.models import CustomJS, ColumnDataSource, Slider</span>
1080
+ </pre></div>
1081
+
1082
+ </div>
1083
+ </div>
1084
+ </div>
1085
+
1086
+ </div>
1087
+
1088
+
1089
+
1090
+ <div class="
1091
+ cell border-box-sizing code_cell rendered">
1092
+ <div class="input">
1093
+
1094
+ <div class="inner_cell">
1095
+ <div class="input_area">
1096
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">*</span><span class="mf">0.005</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">201</span><span class="p">)]</span>
1097
+
1098
+ <span class="n">source</span> <span class="o">=</span> <span class="n">ColumnDataSource</span><span class="p">(</span>
1099
+ <span class="n">data</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">x</span><span class="p">)</span>
1100
+ <span class="p">)</span>
1101
+
1102
+ <span class="c1"># create a new plot using figure</span>
1103
+ <span class="n">plot</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
1104
+ <span class="n">plot_height</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
1105
+ <span class="n">plot_width</span><span class="o">=</span><span class="mi">800</span>
1106
+ <span class="p">)</span>
1107
+
1108
+ <span class="n">plot</span><span class="o">.</span><span class="n">line</span><span class="p">(</span>
1109
+ <span class="s1">&#39;x&#39;</span><span class="p">,</span>
1110
+ <span class="s1">&#39;y&#39;</span><span class="p">,</span>
1111
+ <span class="n">line_width</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span>
1112
+ <span class="n">line_alpha</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span>
1113
+ <span class="n">source</span><span class="o">=</span><span class="n">source</span>
1114
+ <span class="p">)</span>
1115
+
1116
+ <span class="n">slider</span> <span class="o">=</span> <span class="n">Slider</span><span class="p">(</span>
1117
+ <span class="n">start</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span>
1118
+ <span class="n">end</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span>
1119
+ <span class="n">value</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
1120
+ <span class="n">step</span><span class="o">=</span><span class="mf">.1</span><span class="p">,</span>
1121
+ <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Power, value&quot;</span>
1122
+ <span class="p">)</span>
1123
+
1124
+ <span class="n">update_curve</span> <span class="o">=</span> <span class="n">CustomJS</span><span class="p">(</span>
1125
+ <span class="n">args</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
1126
+ <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
1127
+ <span class="n">slider</span><span class="o">=</span><span class="n">slider</span>
1128
+ <span class="p">),</span>
1129
+ <span class="n">code</span><span class="o">=</span><span class="s2">&quot;&quot;&quot;</span>
1130
+ <span class="s2"> var data = source.data;</span>
1131
+ <span class="s2"> var f = slider.value;</span>
1132
+ <span class="s2"> var x = data[&#39;x&#39;]</span>
1133
+ <span class="s2"> var y = data[&#39;y&#39;]</span>
1134
+ <span class="s2"> for (var i = 0; i &lt; x.length; i++) {</span>
1135
+ <span class="s2"> y[i] = Math.pow(x[i], f)</span>
1136
+ <span class="s2"> }</span>
1137
+ <span class="s2"> </span>
1138
+ <span class="s2"> // necessary becasue we mutated source.data in-place</span>
1139
+ <span class="s2"> source.change.emit();</span>
1140
+ <span class="s2"> &quot;&quot;&quot;</span>
1141
+ <span class="p">)</span>
1142
+ <span class="n">slider</span><span class="o">.</span><span class="n">js_on_change</span><span class="p">(</span>
1143
+ <span class="s1">&#39;value&#39;</span><span class="p">,</span>
1144
+ <span class="n">update_curve</span>
1145
+ <span class="p">)</span>
1146
+
1147
+ <span class="c1"># show the results</span>
1148
+ <span class="n">show</span><span class="p">(</span>
1149
+ <span class="n">column</span><span class="p">(</span>
1150
+ <span class="n">slider</span><span class="p">,</span>
1151
+ <span class="n">plot</span>
1152
+ <span class="p">)</span>
1153
+ <span class="p">)</span>
1154
+ </pre></div>
1155
+
1156
+ </div>
1157
+ </div>
1158
+ </div>
1159
+
1160
+ <div class="output_wrapper">
1161
+ <div class="output">
1162
+
1163
+
1164
+ <div class="output_area">
1165
+
1166
+
1167
+
1168
+
1169
+ <div class="output_html rendered_html output_subarea ">
1170
+
1171
+ <div class="bk-root" id="bcc043a5-88fa-4c23-a27e-ed397c54add0" data-root-id="1955"></div>
1172
+
1173
+ </div>
1174
+
1175
+ </div>
1176
+
1177
+ <div class="output_area">
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+ <div id="494f0b4e-df69-4cf1-b425-753a336182d6"></div>
1185
+ <div class="output_subarea output_javascript ">
1186
+ <script type="text/javascript">
1187
+ var element = $('#494f0b4e-df69-4cf1-b425-753a336182d6');
1188
+ (function(root) {
1189
+ function embed_document(root) {
1190
+ const docs_json = {"3a0c7ddb-44e9-4d8f-8c1a-ce2d1278d472":{"defs":[],"roots":{"references":[{"attributes":{"children":[{"id":"1953"},{"id":"1916"}]},"id":"1955","type":"Column"},{"attributes":{"axis":{"id":"1925"},"coordinates":null,"group":null,"ticker":null},"id":"1928","type":"Grid"},{"attributes":{},"id":"1930","type":"BasicTicker"},{"attributes":{"tools":[{"id":"1933"},{"id":"1934"},{"id":"1935"},{"id":"1936"},{"id":"1937"},{"id":"1938"}]},"id":"1940","type":"Toolbar"},{"attributes":{},"id":"1926","type":"BasicTicker"},{"attributes":{},"id":"2030","type":"BasicTickFormatter"},{"attributes":{},"id":"1921","type":"LinearScale"},{"attributes":{"bottom_units":"screen","coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"left_units":"screen","level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"right_units":"screen","syncable":false,"top_units":"screen"},"id":"1939","type":"BoxAnnotation"},{"attributes":{},"id":"1923","type":"LinearScale"},{"attributes":{"coordinates":null,"group":null},"id":"2027","type":"Title"},{"attributes":{},"id":"2031","type":"AllLabels"},{"attributes":{"coordinates":null,"formatter":{"id":"2033"},"group":null,"major_label_policy":{"id":"2034"},"ticker":{"id":"1926"}},"id":"1925","type":"LinearAxis"},{"attributes":{},"id":"2034","type":"AllLabels"},{"attributes":{},"id":"1936","type":"SaveTool"},{"attributes":{},"id":"2033","type":"BasicTickFormatter"},{"attributes":{"axis":{"id":"1929"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"1932","type":"Grid"},{"attributes":{},"id":"2035","type":"UnionRenderers"},{"attributes":{"coordinates":null,"data_source":{"id":"1915"},"glyph":{"id":"1948"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1950"},"nonselection_glyph":{"id":"1949"},"view":{"id":"1952"}},"id":"1951","type":"GlyphRenderer"},{"attributes":{"line_alpha":0.6,"line_color":"#1f77b4","line_width":3,"x":{"field":"x"},"y":{"field":"y"}},"id":"1948","type":"Line"},{"attributes":{},"id":"1933","type":"PanTool"},{"attributes":{},"id":"2036","type":"Selection"},{"attributes":{"end":6,"js_property_callbacks":{"change:value":[{"id":"1954"}]},"start":0.1,"step":0.1,"title":"Power, value","value":1},"id":"1953","type":"Slider"},{"attributes":{"coordinates":null,"formatter":{"id":"2030"},"group":null,"major_label_policy":{"id":"2031"},"ticker":{"id":"1930"}},"id":"1929","type":"LinearAxis"},{"attributes":{"line_alpha":0.1,"line_color":"#1f77b4","line_width":3,"x":{"field":"x"},"y":{"field":"y"}},"id":"1949","type":"Line"},{"attributes":{"args":{"slider":{"id":"1953"},"source":{"id":"1915"}},"code":"\n var data = source.data;\n var f = slider.value;\n var x = data['x']\n var y = data['y']\n for (var i = 0; i < x.length; i++) {\n y[i] = Math.pow(x[i], f)\n }\n \n // necessary becasue we mutated source.data in-place\n source.change.emit();\n "},"id":"1954","type":"CustomJS"},{"attributes":{"data":{"x":[0.0,0.005,0.01,0.015,0.02,0.025,0.03,0.035,0.04,0.045,0.05,0.055,0.06,0.065,0.07,0.075,0.08,0.085,0.09,0.095,0.1,0.105,0.11,0.115,0.12,0.125,0.13,0.135,0.14,0.145,0.15,0.155,0.16,0.165,0.17,0.17500000000000002,0.18,0.185,0.19,0.195,0.2,0.20500000000000002,0.21,0.215,0.22,0.225,0.23,0.23500000000000001,0.24,0.245,0.25,0.255,0.26,0.265,0.27,0.275,0.28,0.28500000000000003,0.29,0.295,0.3,0.305,0.31,0.315,0.32,0.325,0.33,0.335,0.34,0.34500000000000003,0.35000000000000003,0.355,0.36,0.365,0.37,0.375,0.38,0.385,0.39,0.395,0.4,0.405,0.41000000000000003,0.41500000000000004,0.42,0.425,0.43,0.435,0.44,0.445,0.45,0.455,0.46,0.465,0.47000000000000003,0.47500000000000003,0.48,0.485,0.49,0.495,0.5,0.505,0.51,0.515,0.52,0.525,0.53,0.535,0.54,0.545,0.55,0.555,0.56,0.5650000000000001,0.5700000000000001,0.5750000000000001,0.58,0.585,0.59,0.595,0.6,0.605,0.61,0.615,0.62,0.625,0.63,0.635,0.64,0.645,0.65,0.655,0.66,0.665,0.67,0.675,0.68,0.685,0.6900000000000001,0.6950000000000001,0.7000000000000001,0.705,0.71,0.715,0.72,0.725,0.73,0.735,0.74,0.745,0.75,0.755,0.76,0.765,0.77,0.775,0.78,0.785,0.79,0.795,0.8,0.805,0.81,0.8150000000000001,0.8200000000000001,0.8250000000000001,0.8300000000000001,0.835,0.84,0.845,0.85,0.855,0.86,0.865,0.87,0.875,0.88,0.885,0.89,0.895,0.9,0.905,0.91,0.915,0.92,0.925,0.93,0.935,0.9400000000000001,0.9450000000000001,0.9500000000000001,0.9550000000000001,0.96,0.965,0.97,0.975,0.98,0.985,0.99,0.995,1.0],"y":[0.0,0.005,0.01,0.015,0.02,0.025,0.03,0.035,0.04,0.045,0.05,0.055,0.06,0.065,0.07,0.075,0.08,0.085,0.09,0.095,0.1,0.105,0.11,0.115,0.12,0.125,0.13,0.135,0.14,0.145,0.15,0.155,0.16,0.165,0.17,0.17500000000000002,0.18,0.185,0.19,0.195,0.2,0.20500000000000002,0.21,0.215,0.22,0.225,0.23,0.23500000000000001,0.24,0.245,0.25,0.255,0.26,0.265,0.27,0.275,0.28,0.28500000000000003,0.29,0.295,0.3,0.305,0.31,0.315,0.32,0.325,0.33,0.335,0.34,0.34500000000000003,0.35000000000000003,0.355,0.36,0.365,0.37,0.375,0.38,0.385,0.39,0.395,0.4,0.405,0.41000000000000003,0.41500000000000004,0.42,0.425,0.43,0.435,0.44,0.445,0.45,0.455,0.46,0.465,0.47000000000000003,0.47500000000000003,0.48,0.485,0.49,0.495,0.5,0.505,0.51,0.515,0.52,0.525,0.53,0.535,0.54,0.545,0.55,0.555,0.56,0.5650000000000001,0.5700000000000001,0.5750000000000001,0.58,0.585,0.59,0.595,0.6,0.605,0.61,0.615,0.62,0.625,0.63,0.635,0.64,0.645,0.65,0.655,0.66,0.665,0.67,0.675,0.68,0.685,0.6900000000000001,0.6950000000000001,0.7000000000000001,0.705,0.71,0.715,0.72,0.725,0.73,0.735,0.74,0.745,0.75,0.755,0.76,0.765,0.77,0.775,0.78,0.785,0.79,0.795,0.8,0.805,0.81,0.8150000000000001,0.8200000000000001,0.8250000000000001,0.8300000000000001,0.835,0.84,0.845,0.85,0.855,0.86,0.865,0.87,0.875,0.88,0.885,0.89,0.895,0.9,0.905,0.91,0.915,0.92,0.925,0.93,0.935,0.9400000000000001,0.9450000000000001,0.9500000000000001,0.9550000000000001,0.96,0.965,0.97,0.975,0.98,0.985,0.99,0.995,1.0]},"selected":{"id":"2036"},"selection_policy":{"id":"2035"}},"id":"1915","type":"ColumnDataSource"},{"attributes":{"below":[{"id":"1925"}],"center":[{"id":"1928"},{"id":"1932"}],"height":400,"left":[{"id":"1929"}],"renderers":[{"id":"1951"}],"title":{"id":"2027"},"toolbar":{"id":"1940"},"width":800,"x_range":{"id":"1917"},"x_scale":{"id":"1921"},"y_range":{"id":"1919"},"y_scale":{"id":"1923"}},"id":"1916","subtype":"Figure","type":"Plot"},{"attributes":{},"id":"1919","type":"DataRange1d"},{"attributes":{},"id":"1934","type":"WheelZoomTool"},{"attributes":{},"id":"1937","type":"ResetTool"},{"attributes":{"overlay":{"id":"1939"}},"id":"1935","type":"BoxZoomTool"},{"attributes":{},"id":"1917","type":"DataRange1d"},{"attributes":{},"id":"1938","type":"HelpTool"},{"attributes":{"source":{"id":"1915"}},"id":"1952","type":"CDSView"},{"attributes":{"line_alpha":0.2,"line_color":"#1f77b4","line_width":3,"x":{"field":"x"},"y":{"field":"y"}},"id":"1950","type":"Line"}],"root_ids":["1955"]},"title":"Bokeh Application","version":"2.4.3"}};
1191
+ const render_items = [{"docid":"3a0c7ddb-44e9-4d8f-8c1a-ce2d1278d472","root_ids":["1955"],"roots":{"1955":"bcc043a5-88fa-4c23-a27e-ed397c54add0"}}];
1192
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
1193
+ }
1194
+ if (root.Bokeh !== undefined) {
1195
+ embed_document(root);
1196
+ } else {
1197
+ let attempts = 0;
1198
+ const timer = setInterval(function(root) {
1199
+ if (root.Bokeh !== undefined) {
1200
+ clearInterval(timer);
1201
+ embed_document(root);
1202
+ } else {
1203
+ attempts++;
1204
+ if (attempts > 100) {
1205
+ clearInterval(timer);
1206
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
1207
+ }
1208
+ }
1209
+ }, 10, root)
1210
+ }
1211
+ })(window);
1212
+ </script>
1213
+ </div>
1214
+
1215
+ </div>
1216
+
1217
+ </div>
1218
+ </div>
1219
+
1220
+ </div>
1221
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1222
+ <div class="text_cell_render border-box-sizing rendered_html">
1223
+ <h4 id="Data-selection-example">Data selection example<a class="anchor-link" href="#Data-selection-example">&#182;</a></h4><p>It's also possible to make JavaScript actions that execute whenever a user selection (e.g., box, point, lasso) changes. This is done by attaching the same kind of CustomJS object to whatever data source the selection is made on. The example below is a bit more sophisticated, and demonstrates updating one glyph's data source in response to another glyph's selection:</p>
1224
+
1225
+ </div>
1226
+ </div>
1227
+ </div>
1228
+
1229
+
1230
+
1231
+ <div class="
1232
+ cell border-box-sizing code_cell rendered">
1233
+ <div class="input">
1234
+
1235
+ <div class="inner_cell">
1236
+ <div class="input_area">
1237
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from random import random</span>
1238
+ </pre></div>
1239
+
1240
+ </div>
1241
+ </div>
1242
+ </div>
1243
+
1244
+ </div>
1245
+
1246
+
1247
+
1248
+ <div class="
1249
+ cell border-box-sizing code_cell rendered">
1250
+ <div class="input">
1251
+
1252
+ <div class="inner_cell">
1253
+ <div class="input_area">
1254
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">random</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">500</span><span class="p">)]</span>
1255
+ <span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="n">random</span><span class="p">()</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">500</span><span class="p">)]</span>
1256
+ <span class="n">color</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;navy&quot;</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
1257
+
1258
+ <span class="c1"># create a new plot using figure</span>
1259
+ <span class="n">p</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
1260
+ <span class="n">plot_width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
1261
+ <span class="n">plot_height</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
1262
+ <span class="n">tools</span><span class="o">=</span><span class="s2">&quot;lasso_select, reset&quot;</span><span class="p">,</span>
1263
+ <span class="n">title</span><span class="o">=</span><span class="s2">&quot;Select Here&quot;</span>
1264
+ <span class="p">)</span>
1265
+
1266
+ <span class="n">s1</span> <span class="o">=</span> <span class="n">ColumnDataSource</span><span class="p">(</span>
1267
+ <span class="n">data</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
1268
+ <span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span>
1269
+ <span class="n">y</span><span class="o">=</span><span class="n">y</span><span class="p">,</span>
1270
+ <span class="n">color</span><span class="o">=</span><span class="n">color</span>
1271
+ <span class="p">)</span>
1272
+ <span class="p">)</span>
1273
+ <span class="n">p</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span>
1274
+ <span class="s1">&#39;x&#39;</span><span class="p">,</span>
1275
+ <span class="s1">&#39;y&#39;</span><span class="p">,</span>
1276
+ <span class="n">color</span><span class="o">=</span><span class="s1">&#39;color&#39;</span><span class="p">,</span>
1277
+ <span class="n">size</span><span class="o">=</span><span class="mi">8</span><span class="p">,</span>
1278
+ <span class="n">alpha</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span>
1279
+ <span class="n">source</span><span class="o">=</span><span class="n">s1</span><span class="p">,</span>
1280
+ <span class="n">selection_color</span><span class="o">=</span><span class="s2">&quot;firebrick&quot;</span><span class="p">,</span>
1281
+ <span class="n">selection_alpha</span><span class="o">=</span><span class="mf">0.4</span>
1282
+ <span class="p">)</span>
1283
+
1284
+ <span class="n">s2</span> <span class="o">=</span> <span class="n">ColumnDataSource</span><span class="p">(</span>
1285
+ <span class="n">data</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
1286
+ <span class="n">xm</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">],</span>
1287
+ <span class="n">ym</span><span class="o">=</span><span class="p">[</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">]</span>
1288
+ <span class="p">)</span>
1289
+ <span class="p">)</span>
1290
+ <span class="n">p</span><span class="o">.</span><span class="n">line</span><span class="p">(</span>
1291
+ <span class="n">x</span><span class="o">=</span><span class="s1">&#39;xm&#39;</span><span class="p">,</span>
1292
+ <span class="n">y</span><span class="o">=</span><span class="s1">&#39;ym&#39;</span><span class="p">,</span>
1293
+ <span class="n">color</span><span class="o">=</span><span class="s2">&quot;orange&quot;</span><span class="p">,</span>
1294
+ <span class="n">line_width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
1295
+ <span class="n">alpha</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span>
1296
+ <span class="n">source</span><span class="o">=</span><span class="n">s2</span>
1297
+ <span class="p">)</span>
1298
+
1299
+ <span class="n">callback</span> <span class="o">=</span> <span class="n">CustomJS</span><span class="p">(</span>
1300
+ <span class="n">args</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
1301
+ <span class="n">s1</span><span class="o">=</span><span class="n">s1</span><span class="p">,</span>
1302
+ <span class="n">s2</span><span class="o">=</span><span class="n">s2</span>
1303
+ <span class="p">),</span>
1304
+ <span class="n">code</span><span class="o">=</span><span class="s2">&quot;&quot;&quot;</span>
1305
+ <span class="s2"> var inds = s1.selected.indices;</span>
1306
+ <span class="s2"> if (inds.length == 0)</span>
1307
+ <span class="s2"> return;</span>
1308
+
1309
+ <span class="s2"> var ym = 0</span>
1310
+ <span class="s2"> for (var i = 0; i &lt; inds.length; i++) {</span>
1311
+ <span class="s2"> ym += s1.data.y[inds[i]]</span>
1312
+ <span class="s2"> }</span>
1313
+ <span class="s2"> </span>
1314
+ <span class="s2"> ym /= inds.length</span>
1315
+ <span class="s2"> s2.data.ym = [ym, ym]</span>
1316
+
1317
+ <span class="s2"> // necessary because the source.data mutated in-place</span>
1318
+ <span class="s2"> s2.change.emit(); </span>
1319
+ <span class="s2"> &quot;&quot;&quot;</span>
1320
+ <span class="p">)</span>
1321
+
1322
+ <span class="n">s1</span><span class="o">.</span><span class="n">selected</span><span class="o">.</span><span class="n">js_on_change</span><span class="p">(</span>
1323
+ <span class="s1">&#39;indices&#39;</span><span class="p">,</span>
1324
+ <span class="n">callback</span>
1325
+ <span class="p">)</span>
1326
+
1327
+ <span class="c1"># show the results</span>
1328
+ <span class="n">show</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
1329
+ </pre></div>
1330
+
1331
+ </div>
1332
+ </div>
1333
+ </div>
1334
+
1335
+ <div class="output_wrapper">
1336
+ <div class="output">
1337
+
1338
+
1339
+ <div class="output_area">
1340
+
1341
+
1342
+
1343
+
1344
+ <div class="output_html rendered_html output_subarea ">
1345
+
1346
+ <div class="bk-root" id="359df0da-6388-4e41-9dcf-335776a4f4ca" data-root-id="2093"></div>
1347
+
1348
+ </div>
1349
+
1350
+ </div>
1351
+
1352
+ <div class="output_area">
1353
+
1354
+
1355
+
1356
+
1357
+
1358
+
1359
+ <div id="ebbca05d-2ce7-4143-b13f-8a221cf67e1a"></div>
1360
+ <div class="output_subarea output_javascript ">
1361
+ <script type="text/javascript">
1362
+ var element = $('#ebbca05d-2ce7-4143-b13f-8a221cf67e1a');
1363
+ (function(root) {
1364
+ function embed_document(root) {
1365
+ const docs_json = {"a13a1f3a-afe1-4f20-8979-1a6f863b1f9a":{"defs":[],"roots":{"references":[{"attributes":{"below":[{"id":"2104"}],"center":[{"id":"2107"},{"id":"2111"}],"height":400,"left":[{"id":"2108"}],"renderers":[{"id":"2124"},{"id":"2131"}],"title":{"id":"2094"},"toolbar":{"id":"2115"},"width":800,"x_range":{"id":"2096"},"x_scale":{"id":"2100"},"y_range":{"id":"2098"},"y_scale":{"id":"2102"}},"id":"2093","subtype":"Figure","type":"Plot"},{"attributes":{"js_property_callbacks":{"change:indices":[{"id":"2133"}]}},"id":"2134","type":"Selection"},{"attributes":{"coordinates":null,"data_source":{"id":"2126"},"glyph":{"id":"2128"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"2130"},"nonselection_glyph":{"id":"2129"},"view":{"id":"2132"}},"id":"2131","type":"GlyphRenderer"},{"attributes":{"coordinates":null,"group":null,"text":"Select Here"},"id":"2094","type":"Title"},{"attributes":{"coordinates":null,"data_source":{"id":"2118"},"glyph":{"id":"2120"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"2123"},"nonselection_glyph":{"id":"2121"},"selection_glyph":{"id":"2122"},"view":{"id":"2125"}},"id":"2124","type":"GlyphRenderer"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"field":"color"},"hatch_alpha":{"value":0.1},"hatch_color":{"field":"color"},"line_alpha":{"value":0.1},"line_color":{"field":"color"},"size":{"value":8},"x":{"field":"x"},"y":{"field":"y"}},"id":"2121","type":"Circle"},{"attributes":{},"id":"2098","type":"DataRange1d"},{"attributes":{"fill_alpha":{"value":0.4},"fill_color":{"value":"firebrick"},"hatch_alpha":{"value":0.4},"hatch_color":{"value":"firebrick"},"line_alpha":{"value":0.4},"line_color":{"value":"firebrick"},"size":{"value":8},"x":{"field":"x"},"y":{"field":"y"}},"id":"2122","type":"Circle"},{"attributes":{"data":{"color":["navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy","navy"],"x":[0.6513069134361508,0.9302638487172461,0.7721872102808276,0.9678773312494243,0.932163584132042,0.3365191622702126,0.5160400764925743,0.507138567596086,0.7251433640012573,0.6340505520074777,0.08350102901396617,0.5987979437708557,0.7241408305187939,0.41835830994714884,0.14551743590571298,0.9442057416737993,0.23323480380339956,0.6433223706678678,0.5208283787638164,0.09750911862511247,0.5928571118838827,0.12928686714122184,0.9088153709157378,0.4317498816374309,0.10565721702704833,0.26113641713240354,0.7687580600418278,0.7415762653797624,0.0030631227064324973,0.9146812852397072,0.38926592666685,0.9865087662900418,0.6477680613756939,0.551334190194699,0.9702784641182961,0.21643061403900699,0.05886784775956411,0.3841471475700329,0.2677542443370017,0.1646742673288426,0.5043227445502076,0.1582565068262911,0.4198173190457968,0.6294068105999743,0.5666702747159812,0.2543486884254006,0.823514417408352,0.2542396406087897,0.13293613567929985,0.8275036410792899,0.014575960233486951,0.7850609311355264,0.12268409251780699,0.909190112332006,0.7833648465975313,0.15286083332465228,0.01687586389796203,0.5769130920857858,0.13145348394337664,0.6986549355971762,0.4601777944778377,0.28905777763421525,0.6413826005563983,0.8377672556271195,0.5995451442610692,0.28548917121289574,0.652774133561938,0.9874402796326494,0.8230496000475873,0.1207149921046311,0.7415864782263247,0.16679161274687482,0.5637296825580626,0.30137730457299583,0.31921137431430613,0.9066334811764953,0.02285764024395842,0.7690998270486483,0.19185593184800154,0.9249702307071073,0.24812085473883005,0.029486179709639848,0.6879101781169045,0.49149696795946385,0.3460194167702001,0.24467441945834412,0.7458736412055383,0.36282521284029146,0.22946278055738645,0.7516354446562389,0.7137002039871281,0.4930062036681646,0.2087408768245418,0.10163047259068991,0.891272355148203,0.9311417986678233,0.6229724477990332,0.5432798497595713,0.34232827024792434,0.3352953704492202,0.6792690040398256,0.7306533989082279,0.4004196369343742,0.8766568902225923,0.528806001907863,0.8173811121936724,0.2351103005782369,0.49042549807720903,0.6485874125333447,0.9763518274110026,0.881542458750507,0.5900664440143056,0.9944374427294452,0.855762460263826,0.11340549038747938,0.31596248774641655,0.41241695736870254,0.3031284647374888,0.7729362056223238,0.059885834252159875,0.31574241474376197,0.0006271680445302241,0.3462858703144511,0.5247356431062973,0.4669679755463487,0.04600357004447564,0.26417434792005945,0.30739082219444036,0.34962925561402347,0.45465506394595656,0.4797402622927506,0.1773172038443206,0.11444698838845868,0.41785257470418924,0.9922732296690892,0.6848241884314056,0.23385102692970483,0.8712247404427264,0.14783029899109412,0.960097045232122,0.45374638880562423,0.9252865132121151,0.16177502156540058,0.7524431289758342,0.2641434711048044,0.7546490829684227,0.822144931788902,0.9687813317290076,0.8402593529559509,0.3146091575057981,0.9202700814436755,0.4935808637986113,0.22419144701596505,0.7525974270735133,0.7580532257607637,0.49756581455213644,0.2734838935689837,0.8463394537992466,0.7023086183997727,0.6976284863099955,0.7434495344268065,0.8541624731795697,0.8454275152846888,0.6840378108102941,0.3056104521519929,0.013382878381923535,0.45426750812036276,0.5529588427260069,0.4379767092970772,0.720667042601621,0.25339672586281503,0.1397198939212173,0.9568800814828308,0.7848086553678164,0.40889455572781597,0.8793301343361523,0.12113501277830785,0.36220559360926463,0.3927438040412221,0.8109154161852445,0.9602727241091474,0.3257844090572525,0.07034471699924572,0.624186902441565,0.8379225735602048,0.8962411728603107,0.17325892636296647,0.5982500003039828,0.7174629865835963,0.2552578252581805,0.7209970868369583,0.1309128693805126,0.7408025902113183,0.07698456920120678,0.6615676550056455,0.45686229142834633,0.23252163462839426,0.31110924764234205,0.8592644823997827,0.7338988298663699,0.6944355887375703,0.5164794573212885,0.0023292749038691385,0.5863733747384501,0.8586493045359748,0.17181744805824783,0.7662053855206741,0.5205543328089937,0.2886319269587382,0.039159265880527316,0.6699985769514931,0.33464173778180395,0.8475645462733765,0.8164432101743232,0.7460104205939961,0.8228415432899626,0.6666882783596471,0.4991813434796585,0.1193608098665464,0.8686854618632796,0.05135940031202413,0.7825839783277178,0.8347964230460185,0.8908516436132061,0.11590791303081738,0.40100612430145544,0.34012798829410684,0.0639892002093636,0.6258700079340207,0.01859927167406683,0.5219032656294034,0.445797932345956,0.8121975145035341,0.6670153390964684,0.9503737433845734,0.3563195022320542,0.7058115094726762,0.6130699279268739,0.6593403273471008,0.12310703099591602,0.5384054949426623,0.7402810170498086,0.28845629791229777,0.5059752165100799,0.4859289815731448,0.07674806032186277,0.8870435298133093,0.5595847847428194,0.37802052442961065,0.59283340161219,0.19913810216440675,0.8641388291850305,0.22755330611752855,0.17927388939971212,0.8361093585286676,0.5533398972900012,0.45721267821785583,0.0021651744293812447,0.5461915118330215,0.588418753752303,0.25594309794134074,0.9827438965477356,0.9979988064727655,0.5123448781826578,0.18659148599996356,0.6463127039810092,0.5114980763768036,0.09065287032430469,0.34151153935908085,0.9230969149647601,0.5875769393422092,0.7333596366113998,0.8703193960337436,0.9588884231059444,0.7804185584645087,0.816006716840811,0.7141068651950212,0.7977153081700067,0.9878728975886831,0.17097467786399212,0.8524012208049875,0.8704473025854146,0.6416228266811501,0.9531685000787385,0.5905338315190413,0.5008146846716975,0.43728617222590627,0.5792930036272098,0.9654053716431956,0.16946936111345623,0.017431240701524575,0.8806118685819325,0.0968660635933195,0.0209827117303083,0.17665926908939844,0.6091521642671679,0.18910178520146192,0.6394268140518058,0.9361202450130377,0.9557586897276672,0.9727934311033734,0.27742466298072743,0.02898578241027694,0.23495577699996983,0.584546611050723,0.5564726567890119,0.504296719063104,0.6147033708347055,0.18479319521182658,0.4605701692545875,0.612805731180096,0.0457218655399777,0.3125397885629768,0.7208305356225218,0.9395168578075088,0.5266187851308798,0.4541759684464042,0.3693467414399503,0.2959320489161841,0.55409969088015,0.8488654601680939,0.44863365247070586,0.45072286179651344,0.04675565053856845,0.5312010815934662,0.6909668580696734,0.5503796170515132,0.5364023411427637,0.4022465010520585,0.37228338508791836,0.3092673291115705,0.7110430684974979,0.4209773031958629,0.9605096117044938,0.6565546367406684,0.9581066046736644,0.47086571781052267,0.30748525759647005,0.9693009944087112,0.09031580666464678,0.06875016295706116,0.16107560698154755,0.6361804319170127,0.9772476984319132,0.5766883825772631,0.631285501950893,0.2005222337089364,0.9720751697379882,0.7806816266390615,0.2632459562855173,0.7928265564041264,0.39966269912514485,0.45542360753361477,0.1439973879221228,0.012661954364194372,0.692650767988487,0.8819854675321309,0.25868377918262686,0.860500835027924,0.8388384965134495,0.8458636209471603,0.10764089729962889,0.5319865022232936,0.18140134080834258,0.7396152868173417,0.4882467385832465,0.5778821577766574,0.6088596098305882,0.12301292373223471,0.46801597523540106,0.027459737210553725,0.3283749207029666,0.4961356519430067,0.8465980813030154,0.27047941371581685,0.09075949174278419,0.3157737725580979,0.35619853484559294,0.38799749231289005,0.3404742382828372,0.005747538900962468,0.6716647253726235,0.5000097069777873,0.9635443487311711,0.855998744771076,0.858181774118718,0.709502267113809,0.10746004935123665,0.9769211057025867,0.07633966236106138,0.7645472529905423,0.37022732513268986,0.883495811100979,0.10487224446715382,0.15127108397909161,0.5245710776280044,0.8748998161504744,0.7688903603589363,0.22232807049806458,0.22274417952540893,0.17193012947073016,0.04907079707095097,0.6879293891398064,0.3852492682991524,0.4227760689497895,0.34466213339051455,0.15050873113258922,0.07366230390117923,0.10840224285561872,0.6427060768372084,0.41886953593461584,0.7482765367484947,0.6093680039393741,0.09587913786318392,0.2872606577256869,0.567811853039395,0.13284515689266174,0.7977070764434909,0.023946222199447198,0.3614271276042742,0.1843021049074296,0.2504217621603959,0.2675725132561294,0.7977959716852489,0.8029684130637609,0.8508756864629039,0.7694902198684411,0.4504096560641321,0.19463367696296086,0.8642761196199157,0.28681414979029773,0.8501058275832343,0.5338186996990525,0.18154373105652888,0.44371938906998754,0.8840997150104587,0.6773944918529774,0.23086280298350204,0.7888439104656292,0.5972887442486171,0.8795630452584428,0.8412405677190986,0.4975363007770628,0.8038383135986866,0.9831777920678633,0.4157420721321978,0.07498549194308868,0.13798051017890545,0.0988692409420956,0.7233254501489671,0.026206071243108475,0.6714607181807529,0.12279739728490768,0.4586648524310064,0.4877211776942537,0.4167472887518422,0.7359301707811334,0.8289905978795853,0.7440516622065456,0.7536889410853836,0.8404631513738618,0.06137495335813559,0.6710019963015977,0.8169851581622158,0.3040610239320347,0.7220881194049856,0.7185656450248067,0.8522037835726954,0.6065425361827227,0.38734366899908046,0.19476530203455455,0.1355173752646509,0.3437657520141869,0.42689155822364755,0.737259501647197,0.8046128818499482,0.06178431991845512,0.8777876118415705,0.21078704044336727,0.04859183811276613,0.05780538902503385,0.6390422910648276,0.9811913764446444,0.10458322996740577,0.8366930508605093,0.8346604736826548,0.9932517591358815,0.966281300162565,0.836424687448222,0.8656781118052231,0.9509412618507416,0.06858152576959209,0.9499886046350768,0.23058877354737517,0.8586048779841297,0.13369614316512368,0.3418616634498889,0.08511268362457114,0.52782925669614,0.32532303404549723],"y":[0.7706879326563791,0.5201036150020096,0.5419306801408689,0.48834627181019896,0.6715363484548056,0.9367918097926407,0.9654257066594676,0.7737611313604769,0.8425848421418576,0.16067735774862635,0.7886455388621515,0.5606516528217105,0.013380997710886744,0.7646733282819026,0.6548194502654692,0.709698713208151,0.16735683013749547,0.16628825452754536,0.6694752361236199,0.07539482261932995,0.6060649772301896,0.6905549207901502,0.28788165420545553,0.6271585287975526,0.49928799048347006,0.5189443708145665,0.428621878339453,0.10464791900183512,0.7680864132084703,0.23394795136645552,0.3385529925150973,0.735675656764826,0.1849234825993954,0.5187204809428785,0.9055896085606793,0.49766470550628494,0.5093534836572796,0.4189123643122147,0.8295555978153489,0.7316965752825211,0.1867749328289945,0.8441756612571456,0.14032930034034619,0.5266111503875264,0.4952939659940866,0.645736517010519,0.037157460128837916,0.6151862461939497,0.23561791180875846,0.8185725993063673,0.5258378740195462,0.07273941355258251,0.6454692161804773,0.12564840727744087,0.5528059492061111,0.21667807877662515,0.993549172421652,0.5085048159284044,0.297969067015626,0.23176455736512946,0.11387544545643102,0.5370038816795384,0.7201598661435976,0.755722100947745,0.18543118439275186,0.9962915240413148,0.5517257487486367,0.04808336541697522,0.07616753512336938,0.24391011383188,0.9007924158612057,0.18305981435180274,0.5807404255386285,0.2945625068095953,0.5058823193604426,0.3973242508427304,0.9756875205504605,0.5841680656379398,0.6663052018057263,0.7595196942663752,0.21571849360048434,0.034258743642127554,0.9590356567381337,0.8450829883763401,0.30251127748956597,0.854386364782774,0.25068755134842,0.7357913173419612,0.6748371588439573,0.011643462598377119,0.7780116496603872,0.21034079755829482,0.4652683805768393,0.7862556886352279,0.13988096171092912,0.03281569124067418,0.402588000237473,0.6981130988829413,0.2701597037675898,0.9456714591222644,0.9587956890687666,0.17278294474407618,0.7795799142097923,0.5058128553041521,0.8821561261771393,0.005499738142562327,0.08554285399704864,0.37507190067337126,0.5897454956126627,0.3183381286988981,0.09469360469969113,0.04657158687813201,0.9282123330595837,0.6630079427951905,0.345745383059638,0.11754219288982737,0.9195056393659711,0.8466531823413438,0.4158813823498785,0.12601164076005678,0.47959581959141495,0.5898065619889699,0.6295595456021276,0.18322083109449128,0.43043760601601067,0.040060656827184515,0.10495727643368447,0.1494309344914112,0.5877354951847712,0.11826844286084803,0.9688444881440859,0.8158647474643378,0.26066228493497545,0.038443494164359215,0.679248887899768,0.697857108610019,0.975648020807963,0.9958042425752966,0.9658928729030657,0.9016168787944144,0.15437300412332122,0.6738405194545323,0.8342529173663044,0.6228525580657353,0.54108292771299,0.9597530566340803,0.8975226508166572,0.27674817783583394,0.9496572917121086,0.890462746421566,0.4656995720311573,0.3023047548088049,0.7949989251657457,0.009007922033200999,0.41897201404741313,0.6256738667529058,0.9758026276824999,0.580238559018077,0.8951321394939257,0.4131361513831372,0.4642547405310049,0.8609783953840117,0.8615996241211273,0.9486912773906402,0.4693582419343596,0.5480676766439244,0.7730907544791936,0.023158858832662,0.9061995579895741,0.3830256979870904,0.625456290295455,0.7509321028058867,0.6118646903363618,0.202956415979754,0.4093214161605294,0.949013837619508,0.09400942841913829,0.017511107866661435,0.12854847018760363,0.9366632734749275,0.6499722775474996,0.6191500735813702,0.15300359547980968,0.7860410768114916,0.14248555415557274,0.06873677585343163,0.551325964070474,0.9420152187645853,0.49886560815848446,0.8112945771070191,0.8806589512899287,0.583160763225124,0.06954108841093143,0.9400521809434615,0.4295053785886621,0.9062641429159503,0.14814221912539183,0.15259311498482175,0.3490459231540305,0.9792102412959846,0.648861371449013,0.7848017495050797,0.8910557960994806,0.5485619029404264,0.40834158597541825,0.6576939192818685,0.893818577630036,0.1223011599811028,0.3398519250426323,0.3371204822874483,0.8033500736806768,0.33123730365813175,0.428581193857967,0.02746232534311388,0.002974053798155296,0.8234579542262302,0.19922563705966057,0.8423941349275077,0.8396715318243277,0.7001486334937349,0.969450616566072,0.5977045153676733,0.6084927256119949,0.9078583475169107,0.0643717712767441,0.41942305939945357,0.4627137105015855,0.9333860662975106,0.21739356350058647,0.1603895600166403,0.4837249605218187,0.6043303302602177,0.6967354561361379,0.5581870143479413,0.4441740150405987,0.7470498616844573,0.4224695334469919,0.47858861328047775,0.3579992930494288,0.9404001867976555,0.015628170889789517,0.26572575037739776,0.7860778687064385,0.05164276747174501,0.5856153264509111,0.7673942591527751,0.6644819556152906,0.9735574688690217,0.7932940481451002,0.06356760617759172,0.8485435265299415,0.6029848707439518,0.6284763869803253,0.8747004787834808,0.9626184482621959,0.01087172343324827,0.8552627451367105,0.11820014145748226,0.1433469393668736,0.4087035303631975,0.013214898520852225,0.7169106898820283,0.8631576027009307,0.06427232223719759,0.54836754416628,0.05265805975133042,0.9616039437704534,0.830221250765198,0.5525221869918251,0.123379490775966,0.01706753500419933,0.8608420380576459,0.1388017302746164,0.3965267118099369,0.3643322912117998,0.16476895999570695,0.8045676922200834,0.8492157289681719,0.6984354377002387,0.32125604704745414,0.6819342151064626,0.3748033131617201,0.2018433062906152,0.4761157035687512,0.41255875567065914,0.9756642071901571,0.6657121694227084,0.9051529272956559,0.5123711846567581,0.44612492431086526,0.8168177135403558,0.5770316832764945,0.36460781151310107,0.9202350166278103,0.07618432007084741,0.5239842808868533,0.18096063817596197,0.4675129367834562,0.9848795905220556,0.5166869875188835,0.6177464785300588,0.06284790278551167,0.1759014097055881,0.47246655754170563,0.6260450262268928,0.044362428938726994,0.21019182391862457,0.44425769284651495,0.8390439989061668,0.8354283427604158,0.8800226409040954,0.09275455884574013,0.21595170319710422,0.8958281885935722,0.626303520694089,0.17718609733649127,0.833262399184736,0.5754511963550379,0.36611679340694403,0.6750603444065056,0.1783266563338466,0.5437805058676568,0.05067014105989154,0.7726110786296105,0.5193087890256031,0.05737388644937458,0.9564238414627895,0.23650763909556405,0.8358293343687027,0.2030394355315509,0.9860710814010569,0.7670070776732315,0.1304740652288664,0.683281185008737,0.9014755030296702,0.8520998204065957,0.3691444850924651,0.8452809097087416,0.2866971380324761,0.8294222960404447,0.09642899642973735,0.9514725999308802,0.5225009428829611,0.0455392624452402,0.3771092200346323,0.39075345252520255,0.13747220259422033,0.2368436004929323,0.4892414369207849,0.3427812216441588,0.7542689306602937,0.7280899925501639,0.5839025571927222,0.3739425373650461,0.4932662689881967,0.1796939142731978,0.04637429248234948,0.409083342063423,0.7823973259905828,0.8374785461209568,0.590894595744398,0.0012140206041506563,0.1490257742067903,0.24471826460625556,0.1368549250361405,0.6132774824560474,0.8038247560723619,0.6312402129324579,0.16322113136956073,0.9216582707571582,0.1697399628878743,0.23728431750243661,0.14785990510548364,0.7238120592661044,0.8754124650600867,0.3710156278948541,0.7779383903749855,0.41561628921882765,0.8279460774795858,0.3075038392429319,0.751675267725915,0.032938720949168165,0.3307414508407154,0.06863893594688175,0.008208945840913029,0.11966241918738318,0.34065030403051677,0.8960550691281535,0.27349927649818917,0.6523879492356701,0.6055088373030325,0.31920246595391133,0.30254091530063587,0.8574196999543464,0.12576255031124783,0.7035746953143324,0.4569018733075296,0.3276287771098485,0.20398439068065144,0.5623491746930869,0.8363090940646649,0.07776403300986379,0.42223842383883103,0.4833792764350935,0.7528431539524181,0.1493649998166401,0.2952227665994521,0.010446584873847309,0.6154415910055173,0.47474708305366453,0.27850314531519194,0.5675887107353933,0.23425276704233666,0.7078168996485649,0.21517819420639495,0.6731769933373969,0.3749377946984983,0.2710012345789803,0.3094170781298814,0.8354361347325948,0.24908679191971672,0.33917121464444233,0.7770820105919221,0.9279203749066297,0.743669977797595,0.18580618177222696,0.5142526424465613,0.75182235945578,0.9297021549607793,0.7286926147697421,0.26647385344609775,0.2830344077214595,0.9760751988795257,0.8958531647391029,0.25337950390064223,0.04039230074480771,0.4206330230609411,0.29571009958496397,0.5236253524316622,0.6561468312770552,0.6585208317958074,0.7559704292773821,0.8684222855781261,0.7399909221400979,0.04162140286062843,0.16382966732739168,0.6056848684599343,0.27097194820264325,0.08988714912584972,0.5109994708092345,0.9127391655833387,0.8588251908072028,0.31706830499029626,0.20930832081950546,0.753792699700826,0.9126888449144377,0.4871209859408021,0.560202428800822,0.9191199485290019,0.808073355120283,0.0047781531635419094,0.7076692299039703,0.5359399773745028,0.9539129089472136,0.9262643188791914,0.5298047576986914,0.7043172159837021,0.6688913606752497,0.8757718969736543,0.19420323939999018,0.033895200958347416,0.4674018139872749,0.05817535023074527,0.39509575150560317,0.8610272007428242,0.5179775383917841,0.1134015883051338,0.351470927187594,0.18664775452339877,0.11377747657014181,0.4873418062677447,0.6766624881398046,0.3356205633942356,0.7678006178317808,0.5480607839045248,0.3570129659732346,0.14649715424346177,0.13611727657831652,0.14292841297776926,0.05448597546379097,0.5573550795588899,0.66272984256817,0.3095950898787554,0.6121195616897102,0.22929796638931998,0.9516361899759432,0.014307934150724733,0.2698555679318697,0.7427443721220649,0.431486169811779]},"selected":{"id":"2134"},"selection_policy":{"id":"2224"}},"id":"2118","type":"ColumnDataSource"},{"attributes":{},"id":"2105","type":"BasicTicker"},{"attributes":{"tools":[{"id":"2112"},{"id":"2113"}]},"id":"2115","type":"Toolbar"},{"attributes":{"source":{"id":"2118"}},"id":"2125","type":"CDSView"},{"attributes":{},"id":"2100","type":"LinearScale"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"field":"color"},"hatch_alpha":{"value":0.2},"hatch_color":{"field":"color"},"line_alpha":{"value":0.2},"line_color":{"field":"color"},"size":{"value":8},"x":{"field":"x"},"y":{"field":"y"}},"id":"2123","type":"Circle"},{"attributes":{},"id":"2102","type":"LinearScale"},{"attributes":{"args":{"s1":{"id":"2118"},"s2":{"id":"2126"}},"code":"\n var inds = s1.selected.indices;\n if (inds.length == 0)\n return;\n\n var ym = 0\n for (var i = 0; i < inds.length; i++) {\n ym += s1.data.y[inds[i]]\n }\n \n ym /= inds.length\n s2.data.ym = [ym, ym]\n\n // necessary because the source.data mutated in-place\n s2.change.emit(); \n "},"id":"2133","type":"CustomJS"},{"attributes":{"coordinates":null,"formatter":{"id":"2222"},"group":null,"major_label_policy":{"id":"2223"},"ticker":{"id":"2105"}},"id":"2104","type":"LinearAxis"},{"attributes":{},"id":"2226","type":"UnionRenderers"},{"attributes":{"axis":{"id":"2104"},"coordinates":null,"group":null,"ticker":null},"id":"2107","type":"Grid"},{"attributes":{},"id":"2223","type":"AllLabels"},{"attributes":{},"id":"2109","type":"BasicTicker"},{"attributes":{},"id":"2220","type":"AllLabels"},{"attributes":{"coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"syncable":false,"xs_units":"screen","ys_units":"screen"},"id":"2114","type":"PolyAnnotation"},{"attributes":{"coordinates":null,"formatter":{"id":"2219"},"group":null,"major_label_policy":{"id":"2220"},"ticker":{"id":"2109"}},"id":"2108","type":"LinearAxis"},{"attributes":{},"id":"2219","type":"BasicTickFormatter"},{"attributes":{},"id":"2222","type":"BasicTickFormatter"},{"attributes":{"fill_alpha":{"value":0.4},"fill_color":{"field":"color"},"hatch_alpha":{"value":0.4},"hatch_color":{"field":"color"},"line_alpha":{"value":0.4},"line_color":{"field":"color"},"size":{"value":8},"x":{"field":"x"},"y":{"field":"y"}},"id":"2120","type":"Circle"},{"attributes":{},"id":"2224","type":"UnionRenderers"},{"attributes":{"line_alpha":0.6,"line_color":"orange","line_width":5,"x":{"field":"xm"},"y":{"field":"ym"}},"id":"2128","type":"Line"},{"attributes":{"source":{"id":"2126"}},"id":"2132","type":"CDSView"},{"attributes":{},"id":"2227","type":"Selection"},{"attributes":{"axis":{"id":"2108"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"2111","type":"Grid"},{"attributes":{"overlay":{"id":"2114"}},"id":"2112","type":"LassoSelectTool"},{"attributes":{"data":{"xm":[0,1],"ym":[0.5,0.5]},"selected":{"id":"2227"},"selection_policy":{"id":"2226"}},"id":"2126","type":"ColumnDataSource"},{"attributes":{"line_alpha":0.1,"line_color":"orange","line_width":5,"x":{"field":"xm"},"y":{"field":"ym"}},"id":"2129","type":"Line"},{"attributes":{},"id":"2113","type":"ResetTool"},{"attributes":{"line_alpha":0.2,"line_color":"orange","line_width":5,"x":{"field":"xm"},"y":{"field":"ym"}},"id":"2130","type":"Line"},{"attributes":{},"id":"2096","type":"DataRange1d"}],"root_ids":["2093"]},"title":"Bokeh Application","version":"2.4.3"}};
1366
+ const render_items = [{"docid":"a13a1f3a-afe1-4f20-8979-1a6f863b1f9a","root_ids":["2093"],"roots":{"2093":"359df0da-6388-4e41-9dcf-335776a4f4ca"}}];
1367
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
1368
+ }
1369
+ if (root.Bokeh !== undefined) {
1370
+ embed_document(root);
1371
+ } else {
1372
+ let attempts = 0;
1373
+ const timer = setInterval(function(root) {
1374
+ if (root.Bokeh !== undefined) {
1375
+ clearInterval(timer);
1376
+ embed_document(root);
1377
+ } else {
1378
+ attempts++;
1379
+ if (attempts > 100) {
1380
+ clearInterval(timer);
1381
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
1382
+ }
1383
+ }
1384
+ }, 10, root)
1385
+ }
1386
+ })(window);
1387
+ </script>
1388
+ </div>
1389
+
1390
+ </div>
1391
+
1392
+ </div>
1393
+ </div>
1394
+
1395
+ </div>
1396
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1397
+ <div class="text_cell_render border-box-sizing rendered_html">
1398
+ <h3 id="CustomJS-for-UI-Events">CustomJS for UI Events<a class="anchor-link" href="#CustomJS-for-UI-Events">&#182;</a></h3><p>Bokeh also has a general events system. All of the available UI events, and their properties, are listed in the Reference Guide section for <a href="https://bokeh.pydata.org/en/latest/docs/reference/events.html">bokeh.events</a></p>
1399
+
1400
+ </div>
1401
+ </div>
1402
+ </div>
1403
+
1404
+
1405
+
1406
+ <div class="
1407
+ cell border-box-sizing code_cell rendered">
1408
+ <div class="input">
1409
+
1410
+ <div class="inner_cell">
1411
+ <div class="input_area">
1412
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># from bokeh import events</span>
1413
+ <span class="c1"># from bokeh.models import CustomJS, Div, Button</span>
1414
+ <span class="c1"># from bokeh.layouts import column, row</span>
1415
+ </pre></div>
1416
+
1417
+ </div>
1418
+ </div>
1419
+ </div>
1420
+
1421
+ </div>
1422
+
1423
+
1424
+
1425
+ <div class="
1426
+ cell border-box-sizing code_cell rendered">
1427
+ <div class="input">
1428
+
1429
+ <div class="inner_cell">
1430
+ <div class="input_area">
1431
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">x</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">random</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="mi">2000</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span>
1432
+ <span class="n">y</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">random</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="mi">2000</span><span class="p">)</span> <span class="o">*</span> <span class="mi">100</span>
1433
+
1434
+ <span class="c1"># create a new plot using figure</span>
1435
+ <span class="n">p</span> <span class="o">=</span> <span class="n">figure</span><span class="p">(</span>
1436
+ <span class="n">plot_height</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
1437
+ <span class="n">plot_width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
1438
+ <span class="n">tools</span><span class="o">=</span><span class="s2">&quot;box_select, reset&quot;</span>
1439
+ <span class="p">)</span>
1440
+
1441
+ <span class="n">p</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span>
1442
+ <span class="n">x</span><span class="p">,</span>
1443
+ <span class="n">y</span><span class="p">,</span>
1444
+ <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
1445
+ <span class="n">fill_alpha</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span>
1446
+ <span class="n">line_color</span><span class="o">=</span><span class="kc">None</span>
1447
+ <span class="p">)</span>
1448
+
1449
+ <span class="n">div</span> <span class="o">=</span> <span class="n">Div</span><span class="p">(</span><span class="n">width</span><span class="o">=</span><span class="mi">400</span><span class="p">)</span>
1450
+ <span class="n">button</span> <span class="o">=</span> <span class="n">Button</span><span class="p">(</span>
1451
+ <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Button&quot;</span><span class="p">,</span>
1452
+ <span class="n">width</span><span class="o">=</span><span class="mi">300</span>
1453
+ <span class="p">)</span>
1454
+
1455
+ <span class="n">layout</span> <span class="o">=</span> <span class="n">column</span><span class="p">(</span>
1456
+ <span class="n">button</span><span class="p">,</span>
1457
+ <span class="n">row</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">div</span><span class="p">)</span>
1458
+ <span class="p">)</span>
1459
+
1460
+ <span class="c1"># Events with no attributes</span>
1461
+ <span class="n">button</span><span class="o">.</span><span class="n">js_on_event</span><span class="p">(</span>
1462
+ <span class="n">events</span><span class="o">.</span><span class="n">ButtonClick</span><span class="p">,</span>
1463
+ <span class="n">CustomJS</span><span class="p">(</span>
1464
+ <span class="n">args</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">div</span><span class="o">=</span><span class="n">div</span><span class="p">),</span>
1465
+ <span class="n">code</span><span class="o">=</span><span class="s2">&quot;&quot;&quot;</span>
1466
+ <span class="s2"> div.text = &quot;Button!&quot;;</span>
1467
+ <span class="s2"> &quot;&quot;&quot;</span>
1468
+ <span class="p">)</span>
1469
+ <span class="p">)</span>
1470
+
1471
+ <span class="n">p</span><span class="o">.</span><span class="n">js_on_event</span><span class="p">(</span>
1472
+ <span class="n">events</span><span class="o">.</span><span class="n">SelectionGeometry</span><span class="p">,</span>
1473
+ <span class="n">CustomJS</span><span class="p">(</span>
1474
+ <span class="n">args</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">div</span><span class="o">=</span><span class="n">div</span><span class="p">),</span>
1475
+ <span class="n">code</span><span class="o">=</span><span class="s2">&quot;&quot;&quot;</span>
1476
+ <span class="s2"> div.text = &quot;Selection! &lt;p&gt; &lt;p&gt;&quot; + JSON.stringify(cb_obj.geometry, undefined, 2);</span>
1477
+ <span class="s2"> &quot;&quot;&quot;</span>
1478
+ <span class="p">)</span>
1479
+ <span class="p">)</span>
1480
+
1481
+ <span class="n">show</span><span class="p">(</span><span class="n">layout</span><span class="p">)</span>
1482
+ </pre></div>
1483
+
1484
+ </div>
1485
+ </div>
1486
+ </div>
1487
+
1488
+ <div class="output_wrapper">
1489
+ <div class="output">
1490
+
1491
+
1492
+ <div class="output_area">
1493
+
1494
+
1495
+
1496
+
1497
+ <div class="output_html rendered_html output_subarea ">
1498
+
1499
+ <div class="bk-root" id="eb834bd5-69dd-471f-8dd8-9a5c3e71877a" data-root-id="2321"></div>
1500
+
1501
+ </div>
1502
+
1503
+ </div>
1504
+
1505
+ <div class="output_area">
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+ <div id="d19bc71f-f607-4aa7-a36a-118e106a4a8b"></div>
1513
+ <div class="output_subarea output_javascript ">
1514
+ <script type="text/javascript">
1515
+ var element = $('#d19bc71f-f607-4aa7-a36a-118e106a4a8b');
1516
+ (function(root) {
1517
+ function embed_document(root) {
1518
+ const docs_json = {"1aca7d6e-8ba8-4bc7-8dca-c03fa45a148d":{"defs":[],"roots":{"references":[{"attributes":{"children":[{"id":"2319"},{"id":"2320"}]},"id":"2321","type":"Column"},{"attributes":{"fill_alpha":{"value":0.2},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.2},"line_alpha":{"value":0.2},"line_color":{"value":null},"radius":{"value":1},"x":{"field":"x"},"y":{"field":"y"}},"id":"2315","type":"Circle"},{"attributes":{},"id":"2426","type":"UnionRenderers"},{"attributes":{"axis":{"id":"2302"},"coordinates":null,"dimension":1,"group":null,"ticker":null},"id":"2305","type":"Grid"},{"attributes":{},"id":"2422","type":"AllLabels"},{"attributes":{"coordinates":null,"data_source":{"id":"2312"},"glyph":{"id":"2313"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"2315"},"nonselection_glyph":{"id":"2314"},"view":{"id":"2317"}},"id":"2316","type":"GlyphRenderer"},{"attributes":{},"id":"2307","type":"ResetTool"},{"attributes":{"fill_alpha":{"value":0.6},"fill_color":{"value":"#1f77b4"},"line_color":{"value":null},"radius":{"value":1},"x":{"field":"x"},"y":{"field":"y"}},"id":"2313","type":"Circle"},{"attributes":{"overlay":{"id":"2308"}},"id":"2306","type":"BoxSelectTool"},{"attributes":{"coordinates":null,"group":null},"id":"2418","type":"Title"},{"attributes":{},"id":"2421","type":"BasicTickFormatter"},{"attributes":{"coordinates":null,"formatter":{"id":"2424"},"group":null,"major_label_policy":{"id":"2425"},"ticker":{"id":"2299"}},"id":"2298","type":"LinearAxis"},{"attributes":{"source":{"id":"2312"}},"id":"2317","type":"CDSView"},{"attributes":{},"id":"2424","type":"BasicTickFormatter"},{"attributes":{"data":{"x":{"__ndarray__":"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","dtype":"float64","order":"little","shape":[2000]},"y":{"__ndarray__":"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","dtype":"float64","order":"little","shape":[2000]}},"selected":{"id":"2427"},"selection_policy":{"id":"2426"}},"id":"2312","type":"ColumnDataSource"},{"attributes":{"width":400},"id":"2318","type":"Div"},{"attributes":{"tools":[{"id":"2306"},{"id":"2307"}]},"id":"2309","type":"Toolbar"},{"attributes":{"children":[{"id":"2289"},{"id":"2318"}]},"id":"2320","type":"Row"},{"attributes":{"icon":null,"js_event_callbacks":{"button_click":[{"id":"2322"}]},"width":300},"id":"2319","type":"Button"},{"attributes":{"below":[{"id":"2298"}],"center":[{"id":"2301"},{"id":"2305"}],"height":400,"js_event_callbacks":{"selectiongeometry":[{"id":"2323"}]},"left":[{"id":"2302"}],"renderers":[{"id":"2316"}],"title":{"id":"2418"},"toolbar":{"id":"2309"},"width":800,"x_range":{"id":"2290"},"x_scale":{"id":"2294"},"y_range":{"id":"2292"},"y_scale":{"id":"2296"}},"id":"2289","subtype":"Figure","type":"Plot"},{"attributes":{"coordinates":null,"formatter":{"id":"2421"},"group":null,"major_label_policy":{"id":"2422"},"ticker":{"id":"2303"}},"id":"2302","type":"LinearAxis"},{"attributes":{},"id":"2427","type":"Selection"},{"attributes":{},"id":"2290","type":"DataRange1d"},{"attributes":{},"id":"2294","type":"LinearScale"},{"attributes":{},"id":"2303","type":"BasicTicker"},{"attributes":{},"id":"2296","type":"LinearScale"},{"attributes":{"axis":{"id":"2298"},"coordinates":null,"group":null,"ticker":null},"id":"2301","type":"Grid"},{"attributes":{"fill_alpha":{"value":0.1},"fill_color":{"value":"#1f77b4"},"hatch_alpha":{"value":0.1},"line_alpha":{"value":0.1},"line_color":{"value":null},"radius":{"value":1},"x":{"field":"x"},"y":{"field":"y"}},"id":"2314","type":"Circle"},{"attributes":{},"id":"2425","type":"AllLabels"},{"attributes":{},"id":"2299","type":"BasicTicker"},{"attributes":{"bottom_units":"screen","coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"left_units":"screen","level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"right_units":"screen","syncable":false,"top_units":"screen"},"id":"2308","type":"BoxAnnotation"},{"attributes":{"args":{"div":{"id":"2318"}},"code":"\n div.text = \"Selection! <p> <p>\" + JSON.stringify(cb_obj.geometry, undefined, 2);\n "},"id":"2323","type":"CustomJS"},{"attributes":{},"id":"2292","type":"DataRange1d"},{"attributes":{"args":{"div":{"id":"2318"}},"code":"\n div.text = \"Button!\";\n "},"id":"2322","type":"CustomJS"}],"root_ids":["2321"]},"title":"Bokeh Application","version":"2.4.3"}};
1519
+ const render_items = [{"docid":"1aca7d6e-8ba8-4bc7-8dca-c03fa45a148d","root_ids":["2321"],"roots":{"2321":"eb834bd5-69dd-471f-8dd8-9a5c3e71877a"}}];
1520
+ root.Bokeh.embed.embed_items_notebook(docs_json, render_items);
1521
+ }
1522
+ if (root.Bokeh !== undefined) {
1523
+ embed_document(root);
1524
+ } else {
1525
+ let attempts = 0;
1526
+ const timer = setInterval(function(root) {
1527
+ if (root.Bokeh !== undefined) {
1528
+ clearInterval(timer);
1529
+ embed_document(root);
1530
+ } else {
1531
+ attempts++;
1532
+ if (attempts > 100) {
1533
+ clearInterval(timer);
1534
+ console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
1535
+ }
1536
+ }
1537
+ }, 10, root)
1538
+ }
1539
+ })(window);
1540
+ </script>
1541
+ </div>
1542
+
1543
+ </div>
1544
+
1545
+ </div>
1546
+ </div>
1547
+
1548
+ </div>
1549
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1550
+ <div class="text_cell_render border-box-sizing rendered_html">
1551
+ <h3 id="Additional-Information">Additional Information<a class="anchor-link" href="#Additional-Information">&#182;</a></h3><p>There are many kinds of interactions and events that can be connected to <code>CustomJS</code> callbacks.</p>
1552
+ <ul>
1553
+ <li>Widgets - Button, Toggle, Dropdown, TextInput, AutocompleteInput, Select, Multiselect, Slider, (DateRangeSlider), DatePicker,</li>
1554
+ <li>Tools - TapTool, BoxSelectTool, HoverTool,</li>
1555
+ <li>Selection - ColumnDataSource, AjaxDataSource, BlazeDataSource, ServerDataSource</li>
1556
+ <li>Ranges - Range1d, DataRange1d, FactorRange</li>
1557
+ </ul>
1558
+ <p>For more complete examples the User Guide section on <a href="https://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html">JavaScript Interactions</a></p>
1559
+
1560
+ </div>
1561
+ </div>
1562
+ </div>
1563
+