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,1167 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "## 4. Adding Annotations\n",
8
+ "\n",
9
+ "Sometimes we want to add visual cues (boundary lines, shaded regions, labels and arrows, etc.) to our plots to call out some feature or other. Bokeh has several annotation types available for uses like this. Typically to add annotations we create the \"low level\" annotation object directly, and add it to our plot using `add_layout`. Let's take a look at some specific examples."
10
+ ]
11
+ },
12
+ {
13
+ "cell_type": "code",
14
+ "execution_count": 1,
15
+ "metadata": {},
16
+ "outputs": [],
17
+ "source": [
18
+ "from bokeh.io import output_notebook, show\n",
19
+ "from bokeh.plotting import figure\n",
20
+ "\n",
21
+ "import numpy as np"
22
+ ]
23
+ },
24
+ {
25
+ "cell_type": "code",
26
+ "execution_count": 2,
27
+ "metadata": {},
28
+ "outputs": [
29
+ {
30
+ "data": {
31
+ "text/html": [
32
+ "<div class=\"bk-root\">\n",
33
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
34
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
35
+ " </div>\n"
36
+ ]
37
+ },
38
+ "metadata": {},
39
+ "output_type": "display_data"
40
+ },
41
+ {
42
+ "data": {
43
+ "application/javascript": [
44
+ "(function(root) {\n",
45
+ " function now() {\n",
46
+ " return new Date();\n",
47
+ " }\n",
48
+ "\n",
49
+ " const force = true;\n",
50
+ "\n",
51
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
52
+ " root._bokeh_onload_callbacks = [];\n",
53
+ " root._bokeh_is_loading = undefined;\n",
54
+ " }\n",
55
+ "\n",
56
+ "const JS_MIME_TYPE = 'application/javascript';\n",
57
+ " const HTML_MIME_TYPE = 'text/html';\n",
58
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
59
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
60
+ "\n",
61
+ " /**\n",
62
+ " * Render data to the DOM node\n",
63
+ " */\n",
64
+ " function render(props, node) {\n",
65
+ " const script = document.createElement(\"script\");\n",
66
+ " node.appendChild(script);\n",
67
+ " }\n",
68
+ "\n",
69
+ " /**\n",
70
+ " * Handle when an output is cleared or removed\n",
71
+ " */\n",
72
+ " function handleClearOutput(event, handle) {\n",
73
+ " const cell = handle.cell;\n",
74
+ "\n",
75
+ " const id = cell.output_area._bokeh_element_id;\n",
76
+ " const server_id = cell.output_area._bokeh_server_id;\n",
77
+ " // Clean up Bokeh references\n",
78
+ " if (id != null && id in Bokeh.index) {\n",
79
+ " Bokeh.index[id].model.document.clear();\n",
80
+ " delete Bokeh.index[id];\n",
81
+ " }\n",
82
+ "\n",
83
+ " if (server_id !== undefined) {\n",
84
+ " // Clean up Bokeh references\n",
85
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
86
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
87
+ " iopub: {\n",
88
+ " output: function(msg) {\n",
89
+ " const id = msg.content.text.trim();\n",
90
+ " if (id in Bokeh.index) {\n",
91
+ " Bokeh.index[id].model.document.clear();\n",
92
+ " delete Bokeh.index[id];\n",
93
+ " }\n",
94
+ " }\n",
95
+ " }\n",
96
+ " });\n",
97
+ " // Destroy server and session\n",
98
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
99
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
100
+ " }\n",
101
+ " }\n",
102
+ "\n",
103
+ " /**\n",
104
+ " * Handle when a new output is added\n",
105
+ " */\n",
106
+ " function handleAddOutput(event, handle) {\n",
107
+ " const output_area = handle.output_area;\n",
108
+ " const output = handle.output;\n",
109
+ "\n",
110
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
111
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
112
+ " return\n",
113
+ " }\n",
114
+ "\n",
115
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
116
+ "\n",
117
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
118
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
119
+ " // store reference to embed id on output_area\n",
120
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
121
+ " }\n",
122
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
123
+ " const bk_div = document.createElement(\"div\");\n",
124
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
125
+ " const script_attrs = bk_div.children[0].attributes;\n",
126
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
127
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
128
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
129
+ " }\n",
130
+ " // store reference to server id on output_area\n",
131
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
132
+ " }\n",
133
+ " }\n",
134
+ "\n",
135
+ " function register_renderer(events, OutputArea) {\n",
136
+ "\n",
137
+ " function append_mime(data, metadata, element) {\n",
138
+ " // create a DOM node to render to\n",
139
+ " const toinsert = this.create_output_subarea(\n",
140
+ " metadata,\n",
141
+ " CLASS_NAME,\n",
142
+ " EXEC_MIME_TYPE\n",
143
+ " );\n",
144
+ " this.keyboard_manager.register_events(toinsert);\n",
145
+ " // Render to node\n",
146
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
147
+ " render(props, toinsert[toinsert.length - 1]);\n",
148
+ " element.append(toinsert);\n",
149
+ " return toinsert\n",
150
+ " }\n",
151
+ "\n",
152
+ " /* Handle when an output is cleared or removed */\n",
153
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
154
+ " events.on('delete.Cell', handleClearOutput);\n",
155
+ "\n",
156
+ " /* Handle when a new output is added */\n",
157
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
158
+ "\n",
159
+ " /**\n",
160
+ " * Register the mime type and append_mime function with output_area\n",
161
+ " */\n",
162
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
163
+ " /* Is output safe? */\n",
164
+ " safe: true,\n",
165
+ " /* Index of renderer in `output_area.display_order` */\n",
166
+ " index: 0\n",
167
+ " });\n",
168
+ " }\n",
169
+ "\n",
170
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
171
+ " if (root.Jupyter !== undefined) {\n",
172
+ " const events = require('base/js/events');\n",
173
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
174
+ "\n",
175
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
176
+ " register_renderer(events, OutputArea);\n",
177
+ " }\n",
178
+ " }\n",
179
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
180
+ " root._bokeh_timeout = Date.now() + 5000;\n",
181
+ " root._bokeh_failed_load = false;\n",
182
+ " }\n",
183
+ "\n",
184
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
185
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
186
+ " \"<p>\\n\"+\n",
187
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
188
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
189
+ " \"</p>\\n\"+\n",
190
+ " \"<ul>\\n\"+\n",
191
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
192
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
193
+ " \"</ul>\\n\"+\n",
194
+ " \"<code>\\n\"+\n",
195
+ " \"from bokeh.resources import INLINE\\n\"+\n",
196
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
197
+ " \"</code>\\n\"+\n",
198
+ " \"</div>\"}};\n",
199
+ "\n",
200
+ " function display_loaded() {\n",
201
+ " const el = document.getElementById(\"1002\");\n",
202
+ " if (el != null) {\n",
203
+ " el.textContent = \"BokehJS is loading...\";\n",
204
+ " }\n",
205
+ " if (root.Bokeh !== undefined) {\n",
206
+ " if (el != null) {\n",
207
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
208
+ " }\n",
209
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
210
+ " setTimeout(display_loaded, 100)\n",
211
+ " }\n",
212
+ " }\n",
213
+ "\n",
214
+ " function run_callbacks() {\n",
215
+ " try {\n",
216
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
217
+ " if (callback != null)\n",
218
+ " callback();\n",
219
+ " });\n",
220
+ " } finally {\n",
221
+ " delete root._bokeh_onload_callbacks\n",
222
+ " }\n",
223
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
224
+ " }\n",
225
+ "\n",
226
+ " function load_libs(css_urls, js_urls, callback) {\n",
227
+ " if (css_urls == null) css_urls = [];\n",
228
+ " if (js_urls == null) js_urls = [];\n",
229
+ "\n",
230
+ " root._bokeh_onload_callbacks.push(callback);\n",
231
+ " if (root._bokeh_is_loading > 0) {\n",
232
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
233
+ " return null;\n",
234
+ " }\n",
235
+ " if (js_urls == null || js_urls.length === 0) {\n",
236
+ " run_callbacks();\n",
237
+ " return null;\n",
238
+ " }\n",
239
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
240
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
241
+ "\n",
242
+ " function on_load() {\n",
243
+ " root._bokeh_is_loading--;\n",
244
+ " if (root._bokeh_is_loading === 0) {\n",
245
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
246
+ " run_callbacks()\n",
247
+ " }\n",
248
+ " }\n",
249
+ "\n",
250
+ " function on_error(url) {\n",
251
+ " console.error(\"failed to load \" + url);\n",
252
+ " }\n",
253
+ "\n",
254
+ " for (let i = 0; i < css_urls.length; i++) {\n",
255
+ " const url = css_urls[i];\n",
256
+ " const element = document.createElement(\"link\");\n",
257
+ " element.onload = on_load;\n",
258
+ " element.onerror = on_error.bind(null, url);\n",
259
+ " element.rel = \"stylesheet\";\n",
260
+ " element.type = \"text/css\";\n",
261
+ " element.href = url;\n",
262
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
263
+ " document.body.appendChild(element);\n",
264
+ " }\n",
265
+ "\n",
266
+ " for (let i = 0; i < js_urls.length; i++) {\n",
267
+ " const url = js_urls[i];\n",
268
+ " const element = document.createElement('script');\n",
269
+ " element.onload = on_load;\n",
270
+ " element.onerror = on_error.bind(null, url);\n",
271
+ " element.async = false;\n",
272
+ " element.src = url;\n",
273
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
274
+ " document.head.appendChild(element);\n",
275
+ " }\n",
276
+ " };\n",
277
+ "\n",
278
+ " function inject_raw_css(css) {\n",
279
+ " const element = document.createElement(\"style\");\n",
280
+ " element.appendChild(document.createTextNode(css));\n",
281
+ " document.body.appendChild(element);\n",
282
+ " }\n",
283
+ "\n",
284
+ " 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\"];\n",
285
+ " const css_urls = [];\n",
286
+ "\n",
287
+ " const inline_js = [ function(Bokeh) {\n",
288
+ " Bokeh.set_log_level(\"info\");\n",
289
+ " },\n",
290
+ "function(Bokeh) {\n",
291
+ " }\n",
292
+ " ];\n",
293
+ "\n",
294
+ " function run_inline_js() {\n",
295
+ " if (root.Bokeh !== undefined || force === true) {\n",
296
+ " for (let i = 0; i < inline_js.length; i++) {\n",
297
+ " inline_js[i].call(root, root.Bokeh);\n",
298
+ " }\n",
299
+ "if (force === true) {\n",
300
+ " display_loaded();\n",
301
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
302
+ " setTimeout(run_inline_js, 100);\n",
303
+ " } else if (!root._bokeh_failed_load) {\n",
304
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
305
+ " root._bokeh_failed_load = true;\n",
306
+ " } else if (force !== true) {\n",
307
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
308
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
309
+ " }\n",
310
+ " }\n",
311
+ "\n",
312
+ " if (root._bokeh_is_loading === 0) {\n",
313
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
314
+ " run_inline_js();\n",
315
+ " } else {\n",
316
+ " load_libs(css_urls, js_urls, function() {\n",
317
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
318
+ " run_inline_js();\n",
319
+ " });\n",
320
+ " }\n",
321
+ "}(window));"
322
+ ],
323
+ "application/vnd.bokehjs_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n 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\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
324
+ },
325
+ "metadata": {},
326
+ "output_type": "display_data"
327
+ }
328
+ ],
329
+ "source": [
330
+ "#nbi:hide_out\n",
331
+ "# Make all outputs INLINE for default (why a hell this is needed !!!)\n",
332
+ "output_notebook()"
333
+ ]
334
+ },
335
+ {
336
+ "cell_type": "markdown",
337
+ "metadata": {},
338
+ "source": [
339
+ "### Spans\n",
340
+ "\n",
341
+ "`Spans` are \"infinite\" vertical or horizonal lines. When creating them, you specify the `dimension` that should be spanned (i.e., `width` or `height`), any visual line properties for the appearance, and the location along the dimension where the line should be drawn. Let's look at an example that adds two horizontal spans to a simple plot:"
342
+ ]
343
+ },
344
+ {
345
+ "cell_type": "code",
346
+ "execution_count": 3,
347
+ "metadata": {},
348
+ "outputs": [
349
+ {
350
+ "data": {
351
+ "text/html": [
352
+ "\n",
353
+ " <div class=\"bk-root\" id=\"cfa9914d-0ccf-4782-8fdc-05b73f615887\" data-root-id=\"1003\"></div>\n"
354
+ ]
355
+ },
356
+ "metadata": {},
357
+ "output_type": "display_data"
358
+ },
359
+ {
360
+ "data": {
361
+ "application/javascript": [
362
+ "(function(root) {\n",
363
+ " function embed_document(root) {\n",
364
+ " const docs_json = {\"15876a28-a03b-491b-9eab-a99454e61e2f\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"},{\"id\":\"1040\"},{\"id\":\"1041\"}],\"height\":400,\"left\":[{\"id\":\"1016\"}],\"renderers\":[{\"id\":\"1038\"}],\"title\":{\"id\":\"1042\"},\"toolbar\":{\"id\":\"1027\"},\"width\":800,\"x_range\":{\"id\":\"1004\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\":{\"id\":\"1006\"},\"y_scale\":{\"id\":\"1010\"}},\"id\":\"1003\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1004\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1036\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"line_color\":\"firebrick\",\"line_width\":4,\"location\":-1},\"id\":\"1041\",\"type\":\"Span\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1013\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1037\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1051\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"AllLabels\"},{\"attributes\":{\"end\":2,\"start\":-2},\"id\":\"1006\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1008\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1035\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1010\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1048\"},\"group\":null,\"major_label_policy\":{\"id\":\"1049\"},\"ticker\":{\"id\":\"1013\"}},\"id\":\"1012\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1012\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"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\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1045\"},\"group\":null,\"major_label_policy\":{\"id\":\"1046\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"AAAAAAAAAADosPQ5c6+5PyTroQBFjsk/UqC71WQB0z/17xLajArZPwd+kHUC094/TRquW+ol4j+Psd03cLPkP4RSVFt6C+c/hx87gPon6T9y6jY0fAPrPxWKSvAymew/1EXifgbl7T/00v+PnePuP2cCMmBmku8/BX79W53v7z+89Y+uUfrvP1Bu969nsu8/HyCWLJkY7z/TShqFcy7uP+010qtT9uw/RuW4CWBz6z9SkgFbgKnpPxbEKJhTnec/jlWcBSRU5T/E1tKI2dPiPwcgImbqIuA/7DyCHZWQ2j91bS5Us5bUP8j9CSNAz8w/TEI0yqomwD9+2y5b2KKaP6G5N7kdDbO/qOyAd9xIxr+BbUVyy2jRv7LmsAEugNe/sjpMD9la3b9aY21P1nThvydDKlMmD+S/9FywE6N15r+vX1v3GKLov69tz0/qjuq/iB5k3B037L8ze72ja5btv9HkXwNIqe6/Vi+r2Oxs779iZ5KrYN/vv+oNjMh7/++/7b2MPOvM77/uZ1arMUjvv3px8v2lcu6/lcC+7G9O7b8Fp/5tgt7rvzZ0UheUJuq//xvFhRUr6L9bLDnlJfHlvzwO2LSFfuO/xb2z6ofZ4L98BAA6AxLcvx2vM7ZwKNa/O6jwx54F0L+WakSqz3LDv3Q/vLKJoKq/muwql/bOqD9gXtmal//CPwD8eOZbms8/h2bB5rzx1T/22UzEmd3bP2NrhBG8wOA/aXq8zWJn4z9wNrW259vlP4ouB/LyF+g/rTlnjr4V6j/FpRZuJdDrP0Tez5GwQu0/a6/XoaJp7j+BjWWXAULvP1OJbG2eye8/q1vmxBr/7z96Bw1u7OHvP0NRYM1ecu8/yaPcGJKx7j88olpveKHtP5Y8m9HQROw/lET9CSCf6j/oHDGVp7ToP9tbZ6NaiuY/58piTtEl5D9PWHglOo3hP7O6qGmUjt0/Mt+RYle21z8EVtXq1qDRPza3Pf+Vu8Y/F9CnJoX1sz9tSknzyv6Wv7cVLFIQZr+/VCqpT6ddzL89GzqQfl/Uv/Xv8qCGW9q/7IyG1boJ4L9J6+23Qrziv7mna+ZiPuW/VVgnX6CJ578Oh/HtDZjpv5aJI3xbZOu/I0qSyuPp7L8sTh1yuCTuvzOq1wusEe+/8RCNZlqu778DeG20Lvnvv53j6KBn8e+/AEAtRBmX77/9yTvvLOvuv0ooHNFe7+2/e51Cezmm7L/USL5QDxPrvwAOJvHxOem/MYpwtacf57/aAeBZn8nkv0OL4fThPeK/q3VFvgYG379KzE5qIkDZv1SZjjwBOdO/Lf6gIGwAyr83SORDUJe6v79A3v+YIm2/ns805YDHuD/B9lOxCBzJP+y4q624ydI/qP+4h+LU2D9s8n2f5J/eP9FQLrfjDeI/QcLP7C+d5D8/KMPmOffmP7v8zDTuFek/n8L+stLz6j+DLE+wFIzsP22akmSV2u0/o0SilfTb7j/MUjFQmY3vP3QWx5247e8/TNCHJlr77z8eY9SyWrbvP68+R4ZsH+8/em4jkxU47j+auduKqwLtPwrA3NVNgus/fbsvgt266T89AM4987DnP072iXbTaeU/0Pg7vmDr4j9x+luWDDzgP7zPoJSNxdo/DLrpBtfN1D/1+5gUwUDNP+qf1AdAmsA/theArs9Gnj9aE9OApiSyv0nBo3YQ1sW/nmgvi7Ew0b+DIp0l8UnXv8xCZV8FJ92/jrzgAGRc4b+9mha3avjjvxDluuXYYOa/z/f97XWP6L+iqpKRnn7qv/I9eINTKey/gKwzUUaL7b/H7xyD5KDuv/5MAddgZ++/kIRCfbrc779mI79Fwv/vvxvnJK8d0O+/7mfF0EdO778p55AckHvuv1XmbPwWWu2/M6elU8js67+VlKzyUzfqv3bLoxAkPui/gctS41EG5r8KmPxymJXjv4+oH8xF8uC/BXTAalVG3L9lymUnEl/Wv0AEjFQCPtC/k7Ftmvflw79e36K7BnKsv2DD4OpO/aY/hruvy0+Mwj+mLHIKYCnPP22ZZ+b2utU/64wZNRmp2z841R9V4qfgP5q819AvUOM/yPhiaZfG5T//wUZlvAToP1hY32XTBOo/cb3VX7HB6z/gPF312DbtPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]}},\"selected\":{\"id\":\"1051\"},\"selection_policy\":{\"id\":\"1050\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1042\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1034\"},\"glyph\":{\"id\":\"1035\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1037\"},\"nonselection_glyph\":{\"id\":\"1036\"},\"view\":{\"id\":\"1039\"}},\"id\":\"1038\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1034\"}},\"id\":\"1039\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"line_color\":\"olive\",\"line_width\":4,\"location\":1},\"id\":\"1040\",\"type\":\"Span\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
365
+ " const render_items = [{\"docid\":\"15876a28-a03b-491b-9eab-a99454e61e2f\",\"root_ids\":[\"1003\"],\"roots\":{\"1003\":\"cfa9914d-0ccf-4782-8fdc-05b73f615887\"}}];\n",
366
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
367
+ " }\n",
368
+ " if (root.Bokeh !== undefined) {\n",
369
+ " embed_document(root);\n",
370
+ " } else {\n",
371
+ " let attempts = 0;\n",
372
+ " const timer = setInterval(function(root) {\n",
373
+ " if (root.Bokeh !== undefined) {\n",
374
+ " clearInterval(timer);\n",
375
+ " embed_document(root);\n",
376
+ " } else {\n",
377
+ " attempts++;\n",
378
+ " if (attempts > 100) {\n",
379
+ " clearInterval(timer);\n",
380
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
381
+ " }\n",
382
+ " }\n",
383
+ " }, 10, root)\n",
384
+ " }\n",
385
+ "})(window);"
386
+ ],
387
+ "application/vnd.bokehjs_exec.v0+json": ""
388
+ },
389
+ "metadata": {
390
+ "application/vnd.bokehjs_exec.v0+json": {
391
+ "id": "1003"
392
+ }
393
+ },
394
+ "output_type": "display_data"
395
+ }
396
+ ],
397
+ "source": [
398
+ "from bokeh.models.annotations import Span\n",
399
+ "\n",
400
+ "x = np.linspace(0, 20, 200)\n",
401
+ "y = np.sin(x)\n",
402
+ "\n",
403
+ "# create a new plot using figure\n",
404
+ "p = figure(\n",
405
+ " plot_height=400,\n",
406
+ " plot_width=800,\n",
407
+ " y_range=(-2, 2)\n",
408
+ ")\n",
409
+ "\n",
410
+ "p.line(x, y)\n",
411
+ "\n",
412
+ "upper = Span(\n",
413
+ " location=1,\n",
414
+ " dimension='width',\n",
415
+ " line_color='olive',\n",
416
+ " line_width=4\n",
417
+ ")\n",
418
+ "p.add_layout(upper)\n",
419
+ "\n",
420
+ "lower = Span(\n",
421
+ " location=-1,\n",
422
+ " dimension='width',\n",
423
+ " line_color='firebrick',\n",
424
+ " line_width=4\n",
425
+ ")\n",
426
+ "p.add_layout(lower)\n",
427
+ "\n",
428
+ "# show the results\n",
429
+ "show(p)"
430
+ ]
431
+ },
432
+ {
433
+ "cell_type": "markdown",
434
+ "metadata": {},
435
+ "source": [
436
+ "### Box Annotations\n",
437
+ "\n",
438
+ "Sometimes you might want to call out some region of the plot by drawing a shaded box. This can be done with the `BoxAnnotation`, which is configured with the coordinate properties:\n",
439
+ "\n",
440
+ "* `top`\n",
441
+ "* `left`\n",
442
+ "* `bottom`\n",
443
+ "* `right`\n",
444
+ "\n",
445
+ "as well as any visual line or fill properties to control the appearance. \n",
446
+ "\n",
447
+ "\"Infinite\" boxes can be made by leaving any of the coordinates unspecified. E.g., if `top` is not given, the box will always extend to the top of the plot area, regardless of any panning or zooming that happens.\n",
448
+ "\n",
449
+ "Let's take a look at an example that adds a few shaded boxes to a plot:"
450
+ ]
451
+ },
452
+ {
453
+ "cell_type": "code",
454
+ "execution_count": 4,
455
+ "metadata": {},
456
+ "outputs": [
457
+ {
458
+ "data": {
459
+ "text/html": [
460
+ "\n",
461
+ " <div class=\"bk-root\" id=\"1fe17573-8d1e-4b84-85b1-4b944d34df35\" data-root-id=\"1108\"></div>\n"
462
+ ]
463
+ },
464
+ "metadata": {},
465
+ "output_type": "display_data"
466
+ },
467
+ {
468
+ "data": {
469
+ "application/javascript": [
470
+ "(function(root) {\n",
471
+ " function embed_document(root) {\n",
472
+ " const docs_json = {\"da6dfc2d-de38-499b-acbd-0c77cd60d9ea\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1117\"}],\"center\":[{\"id\":\"1120\"},{\"id\":\"1124\"},{\"id\":\"1145\"},{\"id\":\"1146\"},{\"id\":\"1147\"}],\"height\":400,\"left\":[{\"id\":\"1121\"}],\"renderers\":[{\"id\":\"1143\"}],\"title\":{\"id\":\"1159\"},\"toolbar\":{\"id\":\"1132\"},\"width\":800,\"x_range\":{\"id\":\"1109\"},\"x_scale\":{\"id\":\"1113\"},\"y_range\":{\"id\":\"1111\"},\"y_scale\":{\"id\":\"1115\"}},\"id\":\"1108\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1140\",\"type\":\"Line\"},{\"attributes\":{\"tools\":[{\"id\":\"1125\"},{\"id\":\"1126\"},{\"id\":\"1127\"},{\"id\":\"1128\"},{\"id\":\"1129\"},{\"id\":\"1130\"}]},\"id\":\"1132\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1166\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1165\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1159\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1139\"},\"glyph\":{\"id\":\"1140\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1142\"},\"nonselection_glyph\":{\"id\":\"1141\"},\"view\":{\"id\":\"1144\"}},\"id\":\"1143\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom\":1,\"coordinates\":null,\"fill_alpha\":0.1,\"fill_color\":\"olive\",\"group\":null},\"id\":\"1145\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1167\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":2,\"start\":-2},\"id\":\"1111\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1125\",\"type\":\"PanTool\"},{\"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\":\"1131\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1109\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1142\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1129\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1126\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1168\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1131\"}},\"id\":\"1127\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1128\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1139\"}},\"id\":\"1144\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1118\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom\":-0.3,\"coordinates\":null,\"fill_alpha\":0.1,\"fill_color\":\"navy\",\"group\":null,\"left\":7,\"right\":12,\"top\":0.6},\"id\":\"1147\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1113\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1130\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1115\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1162\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1165\"},\"group\":null,\"major_label_policy\":{\"id\":\"1166\"},\"ticker\":{\"id\":\"1118\"}},\"id\":\"1117\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1117\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1120\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"fill_alpha\":0.1,\"fill_color\":\"firebrick\",\"group\":null,\"top\":-1},\"id\":\"1146\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1122\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1163\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1162\"},\"group\":null,\"major_label_policy\":{\"id\":\"1163\"},\"ticker\":{\"id\":\"1122\"}},\"id\":\"1121\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1141\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1121\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1124\",\"type\":\"Grid\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]}},\"selected\":{\"id\":\"1168\"},\"selection_policy\":{\"id\":\"1167\"}},\"id\":\"1139\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"1108\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
473
+ " const render_items = [{\"docid\":\"da6dfc2d-de38-499b-acbd-0c77cd60d9ea\",\"root_ids\":[\"1108\"],\"roots\":{\"1108\":\"1fe17573-8d1e-4b84-85b1-4b944d34df35\"}}];\n",
474
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
475
+ " }\n",
476
+ " if (root.Bokeh !== undefined) {\n",
477
+ " embed_document(root);\n",
478
+ " } else {\n",
479
+ " let attempts = 0;\n",
480
+ " const timer = setInterval(function(root) {\n",
481
+ " if (root.Bokeh !== undefined) {\n",
482
+ " clearInterval(timer);\n",
483
+ " embed_document(root);\n",
484
+ " } else {\n",
485
+ " attempts++;\n",
486
+ " if (attempts > 100) {\n",
487
+ " clearInterval(timer);\n",
488
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
489
+ " }\n",
490
+ " }\n",
491
+ " }, 10, root)\n",
492
+ " }\n",
493
+ "})(window);"
494
+ ],
495
+ "application/vnd.bokehjs_exec.v0+json": ""
496
+ },
497
+ "metadata": {
498
+ "application/vnd.bokehjs_exec.v0+json": {
499
+ "id": "1108"
500
+ }
501
+ },
502
+ "output_type": "display_data"
503
+ }
504
+ ],
505
+ "source": [
506
+ "import numpy as np\n",
507
+ "from bokeh.models.annotations import BoxAnnotation\n",
508
+ "\n",
509
+ "x = np.linspace(0, 20, 200)\n",
510
+ "y = np.sin(x)\n",
511
+ "\n",
512
+ "# create a new plot using figure\n",
513
+ "p = figure(\n",
514
+ " plot_height=400,\n",
515
+ " plot_width=800,\n",
516
+ " y_range=(-2, 2)\n",
517
+ ")\n",
518
+ "\n",
519
+ "p.line(x, y)\n",
520
+ "\n",
521
+ "# region that always fills the top of the plot\n",
522
+ "upper = BoxAnnotation(\n",
523
+ " bottom=1,\n",
524
+ " fill_alpha=0.1,\n",
525
+ " fill_color='olive'\n",
526
+ ")\n",
527
+ "p.add_layout(upper)\n",
528
+ "\n",
529
+ "# region that always fills the bottom of the plot\n",
530
+ "lower = BoxAnnotation(\n",
531
+ " top=-1,\n",
532
+ " fill_alpha=0.1,\n",
533
+ " fill_color='firebrick'\n",
534
+ ")\n",
535
+ "p.add_layout(lower)\n",
536
+ "\n",
537
+ "# a finite region\n",
538
+ "center = BoxAnnotation(\n",
539
+ " top=0.6,\n",
540
+ " bottom=-0.3,\n",
541
+ " left=7,\n",
542
+ " right=12,\n",
543
+ " fill_alpha=0.1,\n",
544
+ " fill_color='navy'\n",
545
+ ")\n",
546
+ "p.add_layout(center)\n",
547
+ "\n",
548
+ "# show the results\n",
549
+ "show(p)"
550
+ ]
551
+ },
552
+ {
553
+ "cell_type": "markdown",
554
+ "metadata": {},
555
+ "source": [
556
+ "### Labels\n",
557
+ "\n",
558
+ "The `Label` annotation allows you to easily attach single text labels to plots. The position and text to display are configured as `x`, `y`, and `text`:\n",
559
+ "\n",
560
+ "```python\n",
561
+ "Label(x=10, y=5, text=\"Some Label\")\n",
562
+ "```\n",
563
+ "\n",
564
+ "By default the units are in \"data space\" but `x_units` and `y_units` maybe set to `\"screen\"` to position the label relative to the canvas. Labels can also accept `x_offset` and `y_offset` to offset the final position from `x` and `y` by a given screen space distance. \n",
565
+ "\n",
566
+ "`Label` objects also have standard text, line (`border_line`) and fill (`background_fill`) properties. The line and fill properties apply to a bounding box around the text:\n",
567
+ "\n",
568
+ "```python\n",
569
+ "Label(x=10, y=5, text=\"Some Label\", text_font_size=\"12pt\", \n",
570
+ " border_line_color=\"red\", background_fill_color=\"blue\")\n",
571
+ "```"
572
+ ]
573
+ },
574
+ {
575
+ "cell_type": "code",
576
+ "execution_count": 5,
577
+ "metadata": {},
578
+ "outputs": [
579
+ {
580
+ "data": {
581
+ "text/html": [
582
+ "\n",
583
+ " <div class=\"bk-root\" id=\"c69551b1-e904-4fac-9ca1-11c55b6af96c\" data-root-id=\"1225\"></div>\n"
584
+ ]
585
+ },
586
+ "metadata": {},
587
+ "output_type": "display_data"
588
+ },
589
+ {
590
+ "data": {
591
+ "application/javascript": [
592
+ "(function(root) {\n",
593
+ " function embed_document(root) {\n",
594
+ " const docs_json = {\"7c31ba43-25a6-48eb-8e2c-c7a49e2d1230\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1234\"}],\"center\":[{\"id\":\"1237\"},{\"id\":\"1241\"},{\"id\":\"1262\"}],\"height\":400,\"left\":[{\"id\":\"1238\"}],\"renderers\":[{\"id\":\"1260\"}],\"title\":{\"id\":\"1285\"},\"toolbar\":{\"id\":\"1249\"},\"width\":800,\"x_range\":{\"id\":\"1226\"},\"x_scale\":{\"id\":\"1230\"},\"y_range\":{\"id\":\"1228\"},\"y_scale\":{\"id\":\"1232\"}},\"id\":\"1225\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1289\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1239\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1288\"},\"group\":null,\"major_label_policy\":{\"id\":\"1289\"},\"ticker\":{\"id\":\"1239\"}},\"id\":\"1238\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Second Point\",\"text_baseline\":\"middle\",\"x\":5,\"x_offset\":12,\"y\":7},\"id\":\"1262\",\"type\":\"Label\"},{\"attributes\":{},\"id\":\"1294\",\"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\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1258\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1235\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1234\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1237\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1242\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"olive\"},\"hatch_color\":{\"value\":\"olive\"},\"line_color\":{\"value\":\"olive\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1257\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1243\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1288\",\"type\":\"BasicTickFormatter\"},{\"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\":\"1248\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1242\"},{\"id\":\"1243\"},{\"id\":\"1244\"},{\"id\":\"1245\"},{\"id\":\"1246\"},{\"id\":\"1247\"}]},\"id\":\"1249\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1285\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1232\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1230\",\"type\":\"LinearScale\"},{\"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\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1259\",\"type\":\"Circle\"},{\"attributes\":{\"overlay\":{\"id\":\"1248\"}},\"id\":\"1244\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1292\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1291\"},\"group\":null,\"major_label_policy\":{\"id\":\"1292\"},\"ticker\":{\"id\":\"1235\"}},\"id\":\"1234\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1247\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1246\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1293\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"end\":10},\"id\":\"1228\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{\"x\":[2,5,8],\"y\":[4,7,6]},\"selected\":{\"id\":\"1294\"},\"selection_policy\":{\"id\":\"1293\"}},\"id\":\"1256\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1245\",\"type\":\"SaveTool\"},{\"attributes\":{\"source\":{\"id\":\"1256\"}},\"id\":\"1261\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1291\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1256\"},\"glyph\":{\"id\":\"1257\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1259\"},\"nonselection_glyph\":{\"id\":\"1258\"},\"view\":{\"id\":\"1261\"}},\"id\":\"1260\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"end\":10},\"id\":\"1226\",\"type\":\"Range1d\"},{\"attributes\":{\"axis\":{\"id\":\"1238\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1241\",\"type\":\"Grid\"}],\"root_ids\":[\"1225\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
595
+ " const render_items = [{\"docid\":\"7c31ba43-25a6-48eb-8e2c-c7a49e2d1230\",\"root_ids\":[\"1225\"],\"roots\":{\"1225\":\"c69551b1-e904-4fac-9ca1-11c55b6af96c\"}}];\n",
596
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
597
+ " }\n",
598
+ " if (root.Bokeh !== undefined) {\n",
599
+ " embed_document(root);\n",
600
+ " } else {\n",
601
+ " let attempts = 0;\n",
602
+ " const timer = setInterval(function(root) {\n",
603
+ " if (root.Bokeh !== undefined) {\n",
604
+ " clearInterval(timer);\n",
605
+ " embed_document(root);\n",
606
+ " } else {\n",
607
+ " attempts++;\n",
608
+ " if (attempts > 100) {\n",
609
+ " clearInterval(timer);\n",
610
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
611
+ " }\n",
612
+ " }\n",
613
+ " }, 10, root)\n",
614
+ " }\n",
615
+ "})(window);"
616
+ ],
617
+ "application/vnd.bokehjs_exec.v0+json": ""
618
+ },
619
+ "metadata": {
620
+ "application/vnd.bokehjs_exec.v0+json": {
621
+ "id": "1225"
622
+ }
623
+ },
624
+ "output_type": "display_data"
625
+ }
626
+ ],
627
+ "source": [
628
+ "from bokeh.models.annotations import Label\n",
629
+ "from bokeh.plotting import figure\n",
630
+ "\n",
631
+ "# create a new plot using figure\n",
632
+ "p = figure(\n",
633
+ " plot_height=400,\n",
634
+ " plot_width=800,\n",
635
+ " x_range=(0,10),\n",
636
+ " y_range=(0,10)\n",
637
+ ")\n",
638
+ "\n",
639
+ "p.circle(\n",
640
+ " [2, 5, 8],\n",
641
+ " [4, 7, 6],\n",
642
+ " color=\"olive\",\n",
643
+ " size=10\n",
644
+ ")\n",
645
+ "\n",
646
+ "label = Label(\n",
647
+ " x=5,\n",
648
+ " y=7,\n",
649
+ " x_offset=12,\n",
650
+ " text=\"Second Point\",\n",
651
+ " text_baseline=\"middle\"\n",
652
+ ")\n",
653
+ "p.add_layout(label)\n",
654
+ "\n",
655
+ "# show the results\n",
656
+ "show(p)"
657
+ ]
658
+ },
659
+ {
660
+ "cell_type": "markdown",
661
+ "metadata": {},
662
+ "source": [
663
+ "### LabelSet\n",
664
+ "\n",
665
+ "The `LabelSet` annotation allows you to create many labels at once, for instance if you want to label an entire set of scatter markers. They are similar to `Label`, but they can also \n",
666
+ "accept a `ColumnDataSource` as the `source` property, and then `x` and `y` may refer to columns in the data source, e.g. `x=\"col2\"` (but may also still be fixed values, e.g. `x=10`)."
667
+ ]
668
+ },
669
+ {
670
+ "cell_type": "code",
671
+ "execution_count": 6,
672
+ "metadata": {},
673
+ "outputs": [
674
+ {
675
+ "data": {
676
+ "text/html": [
677
+ "\n",
678
+ " <div class=\"bk-root\" id=\"313ece72-1567-4c01-b144-d9601d400206\" data-root-id=\"1383\"></div>\n"
679
+ ]
680
+ },
681
+ "metadata": {},
682
+ "output_type": "display_data"
683
+ },
684
+ {
685
+ "data": {
686
+ "application/javascript": [
687
+ "(function(root) {\n",
688
+ " function embed_document(root) {\n",
689
+ " const docs_json = {\"44f1f574-e583-4782-8b98-ed7f06e63921\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1392\"}],\"center\":[{\"id\":\"1395\"},{\"id\":\"1399\"},{\"id\":\"1420\"}],\"height\":400,\"left\":[{\"id\":\"1396\"}],\"renderers\":[{\"id\":\"1418\"}],\"title\":{\"id\":\"1455\"},\"toolbar\":{\"id\":\"1407\"},\"width\":800,\"x_range\":{\"id\":\"1384\"},\"x_scale\":{\"id\":\"1388\"},\"y_range\":{\"id\":\"1386\"},\"y_scale\":{\"id\":\"1390\"}},\"id\":\"1383\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"1396\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1399\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1351\"}},\"id\":\"1419\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1351\"},\"glyph\":{\"id\":\"1415\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1417\"},\"nonselection_glyph\":{\"id\":\"1416\"},\"view\":{\"id\":\"1419\"}},\"id\":\"1418\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"tools\":[{\"id\":\"1400\"},{\"id\":\"1401\"},{\"id\":\"1402\"},{\"id\":\"1403\"},{\"id\":\"1404\"},{\"id\":\"1405\"}]},\"id\":\"1407\",\"type\":\"Toolbar\"},{\"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\":8},\"x\":{\"field\":\"temp\"},\"y\":{\"field\":\"pressure\"}},\"id\":\"1416\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"names\":[\"A\",\"B\",\"C\",\"D\",\"E\",\"F\"],\"pressure\":[165,189,220,141,260,174],\"temp\":[166,171,172,168,174,162]},\"selected\":{\"id\":\"1464\"},\"selection_policy\":{\"id\":\"1463\"}},\"id\":\"1351\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":8},\"x\":{\"field\":\"temp\"},\"y\":{\"field\":\"pressure\"}},\"id\":\"1415\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1400\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"level\":\"glyph\",\"source\":{\"id\":\"1351\"},\"text\":{\"field\":\"names\"},\"x\":{\"field\":\"temp\"},\"x_offset\":{\"value\":5},\"y\":{\"field\":\"pressure\"},\"y_offset\":{\"value\":5}},\"id\":\"1420\",\"type\":\"LabelSet\"},{\"attributes\":{},\"id\":\"1404\",\"type\":\"ResetTool\"},{\"attributes\":{\"end\":175,\"start\":160},\"id\":\"1384\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1401\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1406\"}},\"id\":\"1402\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1403\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1388\",\"type\":\"LinearScale\"},{\"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\":8},\"x\":{\"field\":\"temp\"},\"y\":{\"field\":\"pressure\"}},\"id\":\"1417\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1461\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1455\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1393\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1405\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1459\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1390\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1462\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1386\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis_label\":\"Temperature (C)\",\"coordinates\":null,\"formatter\":{\"id\":\"1461\"},\"group\":null,\"major_label_policy\":{\"id\":\"1462\"},\"ticker\":{\"id\":\"1393\"}},\"id\":\"1392\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1458\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1392\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1395\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1397\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"Selection\"},{\"attributes\":{\"axis_label\":\"Pressure (lbs)\",\"coordinates\":null,\"formatter\":{\"id\":\"1458\"},\"group\":null,\"major_label_policy\":{\"id\":\"1459\"},\"ticker\":{\"id\":\"1397\"}},\"id\":\"1396\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1463\",\"type\":\"UnionRenderers\"},{\"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\":\"1406\",\"type\":\"BoxAnnotation\"}],\"root_ids\":[\"1383\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
690
+ " const render_items = [{\"docid\":\"44f1f574-e583-4782-8b98-ed7f06e63921\",\"root_ids\":[\"1383\"],\"roots\":{\"1383\":\"313ece72-1567-4c01-b144-d9601d400206\"}}];\n",
691
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
692
+ " }\n",
693
+ " if (root.Bokeh !== undefined) {\n",
694
+ " embed_document(root);\n",
695
+ " } else {\n",
696
+ " let attempts = 0;\n",
697
+ " const timer = setInterval(function(root) {\n",
698
+ " if (root.Bokeh !== undefined) {\n",
699
+ " clearInterval(timer);\n",
700
+ " embed_document(root);\n",
701
+ " } else {\n",
702
+ " attempts++;\n",
703
+ " if (attempts > 100) {\n",
704
+ " clearInterval(timer);\n",
705
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
706
+ " }\n",
707
+ " }\n",
708
+ " }, 10, root)\n",
709
+ " }\n",
710
+ "})(window);"
711
+ ],
712
+ "application/vnd.bokehjs_exec.v0+json": ""
713
+ },
714
+ "metadata": {
715
+ "application/vnd.bokehjs_exec.v0+json": {
716
+ "id": "1383"
717
+ }
718
+ },
719
+ "output_type": "display_data"
720
+ }
721
+ ],
722
+ "source": [
723
+ "from bokeh.models import ColumnDataSource, LabelSet\n",
724
+ "\n",
725
+ "source = ColumnDataSource(\n",
726
+ " data=dict(\n",
727
+ " temp=[166, 171, 172, 168, 174, 162],\n",
728
+ " pressure=[165, 189, 220, 141, 260, 174],\n",
729
+ " names=['A', 'B', 'C', 'D', 'E', 'F']\n",
730
+ " )\n",
731
+ ")\n",
732
+ "\n",
733
+ "p = figure(x_range=(160, 175))\n",
734
+ "\n",
735
+ "# create a new plot using figure\n",
736
+ "p = figure(\n",
737
+ " plot_height=400,\n",
738
+ " plot_width=800,\n",
739
+ " x_range=(160, 175)\n",
740
+ ")\n",
741
+ "\n",
742
+ "p.scatter(\n",
743
+ " x='temp',\n",
744
+ " y='pressure',\n",
745
+ " size=8,\n",
746
+ " source=source\n",
747
+ ")\n",
748
+ "p.xaxis.axis_label = 'Temperature (C)'\n",
749
+ "p.yaxis.axis_label = 'Pressure (lbs)'\n",
750
+ "\n",
751
+ "labels = LabelSet(\n",
752
+ " x='temp',\n",
753
+ " y='pressure',\n",
754
+ " text='names',\n",
755
+ " level='glyph',\n",
756
+ " render_mode='canvas',\n",
757
+ " x_offset=5,\n",
758
+ " y_offset=5,\n",
759
+ " source=source\n",
760
+ ")\n",
761
+ "p.add_layout(labels)\n",
762
+ "\n",
763
+ "# show the results\n",
764
+ "show(p)"
765
+ ]
766
+ },
767
+ {
768
+ "cell_type": "markdown",
769
+ "metadata": {},
770
+ "source": [
771
+ "### Arrows\n",
772
+ "\n",
773
+ "The `Arrow` annotation allows you to \"point\" at different things on your plot, and can be especially useful in conjuction with labels. \n",
774
+ "\n",
775
+ "For example, to create an arrow that points from `(0,0)` to `(1,1)`:\n",
776
+ "\n",
777
+ "```python\n",
778
+ "p.add_layout(Arrow(x_start=0, y_start=0, x_end=1, y_end=0))\n",
779
+ "```\n",
780
+ "\n",
781
+ "This arrow will have the default [`OpenHead`](https://bokeh.pydata.org/en/latest/docs/reference/models/arrow_heads.html#bokeh.models.arrow_heads.OpenHead) arrow head at the end of the arrow. Other kinds of arrow heads include [`NormalHead`](https://bokeh.pydata.org/en/latest/docs/reference/models/arrow_heads.html#bokeh.models.arrow_heads.NormalHead) and [`VeeHead`](https://bokeh.pydata.org/en/latest/docs/reference/models/arrow_heads.html#bokeh.models.arrow_heads.VeeHead). The arrow head type can be controlled by setting the `start` and `end` properties of `Arrow` objects:\n",
782
+ "\n",
783
+ "```python\n",
784
+ "p.add_layout(Arrow(start=OpenHead(), end=VeeHead(), \n",
785
+ " x_start=0, y_start=0, x_end=1, y_end=0))\n",
786
+ "```\n",
787
+ "\n",
788
+ "This will create a double-ended arrow with an \"open\" head at the start, and a \"vee\" head at the end. Arrowheads have the standard set of line and fill properties to control their appearance. As an example\n",
789
+ "\n",
790
+ "```python\n",
791
+ "OpenHead(line_color=\"firebrick\", line_width=4)\n",
792
+ "```\n",
793
+ "\n",
794
+ "The code and plot below shows several of these configurations together."
795
+ ]
796
+ },
797
+ {
798
+ "cell_type": "code",
799
+ "execution_count": 7,
800
+ "metadata": {},
801
+ "outputs": [
802
+ {
803
+ "data": {
804
+ "text/html": [
805
+ "\n",
806
+ " <div class=\"bk-root\" id=\"881dc2b4-e06b-403f-8832-ccd1a3d3344e\" data-root-id=\"1521\"></div>\n"
807
+ ]
808
+ },
809
+ "metadata": {},
810
+ "output_type": "display_data"
811
+ },
812
+ {
813
+ "data": {
814
+ "application/javascript": [
815
+ "(function(root) {\n",
816
+ " function embed_document(root) {\n",
817
+ " const docs_json = {\"77841e97-1532-4da8-ae07-e5c5298f49d8\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1530\"}],\"center\":[{\"id\":\"1533\"},{\"id\":\"1537\"},{\"id\":\"1559\"},{\"id\":\"1562\"},{\"id\":\"1565\"}],\"height\":400,\"left\":[{\"id\":\"1534\"}],\"renderers\":[{\"id\":\"1556\"}],\"title\":{\"id\":\"1611\"},\"toolbar\":{\"id\":\"1545\"},\"width\":800,\"x_range\":{\"id\":\"1522\"},\"x_scale\":{\"id\":\"1526\"},\"y_range\":{\"id\":\"1524\"},\"y_scale\":{\"id\":\"1528\"}},\"id\":\"1521\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"size\":{\"value\":35}},\"id\":\"1564\",\"type\":\"VeeHead\"},{\"attributes\":{},\"id\":\"1626\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1524\",\"type\":\"DataRange1d\"},{\"attributes\":{\"tools\":[{\"id\":\"1538\"},{\"id\":\"1539\"},{\"id\":\"1540\"},{\"id\":\"1541\"},{\"id\":\"1542\"},{\"id\":\"1543\"}]},\"id\":\"1545\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1552\"},\"glyph\":{\"id\":\"1553\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1555\"},\"nonselection_glyph\":{\"id\":\"1554\"},\"view\":{\"id\":\"1557\"}},\"id\":\"1556\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1627\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1522\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1611\",\"type\":\"Title\"},{\"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\":\"1544\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1552\"}},\"id\":\"1557\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1538\",\"type\":\"PanTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"fill_color\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"field\":\"hatch_color\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"field\":\"line_color\"},\"radius\":{\"value\":0.1},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1554\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1542\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"fill_color\"},\"hatch_color\":{\"field\":\"hatch_color\"},\"line_color\":{\"field\":\"line_color\"},\"radius\":{\"value\":0.1},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1553\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1539\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1629\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1544\"}},\"id\":\"1540\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1541\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1614\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"orange\"}},\"id\":\"1561\",\"type\":\"NormalHead\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"field\":\"fill_color\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"field\":\"hatch_color\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"field\":\"line_color\"},\"radius\":{\"value\":0.1},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1555\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1615\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1531\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1528\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1543\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1626\"},\"selection_policy\":{\"id\":\"1625\"}},\"id\":\"1619\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1526\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1628\"},\"selection_policy\":{\"id\":\"1627\"}},\"id\":\"1620\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1617\"},\"group\":null,\"major_label_policy\":{\"id\":\"1618\"},\"ticker\":{\"id\":\"1531\"}},\"id\":\"1530\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1617\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1530\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1533\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1564\"},\"group\":null,\"line_color\":{\"value\":\"red\"},\"source\":{\"id\":\"1621\"},\"start\":null,\"x_end\":{\"value\":0},\"x_start\":{\"value\":0.5},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0.7}},\"id\":\"1565\",\"type\":\"Arrow\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1561\"},\"group\":null,\"source\":{\"id\":\"1620\"},\"start\":null,\"x_end\":{\"value\":0.5},\"x_start\":{\"value\":1},\"y_end\":{\"value\":0.7},\"y_start\":{\"value\":0}},\"id\":\"1562\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1535\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1623\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1614\"},\"group\":null,\"major_label_policy\":{\"id\":\"1615\"},\"ticker\":{\"id\":\"1535\"}},\"id\":\"1534\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1618\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{},\"selected\":{\"id\":\"1630\"},\"selection_policy\":{\"id\":\"1629\"}},\"id\":\"1621\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1628\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"end\":{\"id\":\"1558\"},\"group\":null,\"source\":{\"id\":\"1619\"},\"start\":null,\"x_end\":{\"value\":1},\"x_start\":{\"value\":0},\"y_end\":{\"value\":0},\"y_start\":{\"value\":0}},\"id\":\"1559\",\"type\":\"Arrow\"},{\"attributes\":{},\"id\":\"1622\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1630\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":{\"value\":\"firebrick\"},\"line_width\":{\"value\":4}},\"id\":\"1558\",\"type\":\"OpenHead\"},{\"attributes\":{\"axis\":{\"id\":\"1534\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1537\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1625\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"fill_color\":[\"navy\",\"yellow\",\"red\"],\"hatch_color\":[\"navy\",\"yellow\",\"red\"],\"line_color\":[\"navy\",\"yellow\",\"red\"],\"x\":[0,1,0.5],\"y\":[0,0,0.7]},\"selected\":{\"id\":\"1623\"},\"selection_policy\":{\"id\":\"1622\"}},\"id\":\"1552\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"1521\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
818
+ " const render_items = [{\"docid\":\"77841e97-1532-4da8-ae07-e5c5298f49d8\",\"root_ids\":[\"1521\"],\"roots\":{\"1521\":\"881dc2b4-e06b-403f-8832-ccd1a3d3344e\"}}];\n",
819
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
820
+ " }\n",
821
+ " if (root.Bokeh !== undefined) {\n",
822
+ " embed_document(root);\n",
823
+ " } else {\n",
824
+ " let attempts = 0;\n",
825
+ " const timer = setInterval(function(root) {\n",
826
+ " if (root.Bokeh !== undefined) {\n",
827
+ " clearInterval(timer);\n",
828
+ " embed_document(root);\n",
829
+ " } else {\n",
830
+ " attempts++;\n",
831
+ " if (attempts > 100) {\n",
832
+ " clearInterval(timer);\n",
833
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
834
+ " }\n",
835
+ " }\n",
836
+ " }, 10, root)\n",
837
+ " }\n",
838
+ "})(window);"
839
+ ],
840
+ "application/vnd.bokehjs_exec.v0+json": ""
841
+ },
842
+ "metadata": {
843
+ "application/vnd.bokehjs_exec.v0+json": {
844
+ "id": "1521"
845
+ }
846
+ },
847
+ "output_type": "display_data"
848
+ }
849
+ ],
850
+ "source": [
851
+ "from bokeh.models.annotations import Arrow\n",
852
+ "from bokeh.models.arrow_heads import OpenHead, NormalHead, VeeHead\n",
853
+ "\n",
854
+ "# create a new plot using figure\n",
855
+ "p = figure(\n",
856
+ " plot_height=400,\n",
857
+ " plot_width=800\n",
858
+ ")\n",
859
+ "\n",
860
+ "p.circle(\n",
861
+ " x=[0, 1, 0.5],\n",
862
+ " y=[0, 0, 0.7],\n",
863
+ " radius=0.1,\n",
864
+ " color=[\"navy\", \"yellow\", \"red\"],\n",
865
+ " fill_alpha=0.1\n",
866
+ ")\n",
867
+ "\n",
868
+ "p.add_layout(\n",
869
+ " Arrow(\n",
870
+ " end=OpenHead(\n",
871
+ " line_color=\"firebrick\",\n",
872
+ " line_width=4\n",
873
+ " ),\n",
874
+ " x_start=0,\n",
875
+ " y_start=0,\n",
876
+ " x_end=1,\n",
877
+ " y_end=0\n",
878
+ " )\n",
879
+ ")\n",
880
+ "\n",
881
+ "p.add_layout(\n",
882
+ " Arrow(\n",
883
+ " end=NormalHead(\n",
884
+ " fill_color=\"orange\"\n",
885
+ " ),\n",
886
+ " x_start=1,\n",
887
+ " y_start=0,\n",
888
+ " x_end=0.5,\n",
889
+ " y_end=0.7\n",
890
+ " )\n",
891
+ ")\n",
892
+ "\n",
893
+ "p.add_layout(\n",
894
+ " Arrow(\n",
895
+ " end=VeeHead(size=35), \n",
896
+ " line_color=\"red\",\n",
897
+ " x_start=0.5,\n",
898
+ " y_start=0.7,\n",
899
+ " x_end=0,\n",
900
+ " y_end=0\n",
901
+ " )\n",
902
+ ")\n",
903
+ "\n",
904
+ "# show the results\n",
905
+ "show(p)"
906
+ ]
907
+ },
908
+ {
909
+ "cell_type": "markdown",
910
+ "metadata": {},
911
+ "source": [
912
+ "### Legends\n",
913
+ "\n",
914
+ "When plots have multiple glyphs, it is desirable to include a legend to help users interpret what they see. Bokeh can generate legends easily based on the glyphs that are added. "
915
+ ]
916
+ },
917
+ {
918
+ "cell_type": "markdown",
919
+ "metadata": {},
920
+ "source": [
921
+ "#### Simple Legends\n",
922
+ "\n",
923
+ "In the simplest case, you can simply pass a string as the `legend_label` argument to a glyph function:\n",
924
+ "```python\n",
925
+ "p.circle(x, y, legend_label=\"sin(x)\")\n",
926
+ "``` \n",
927
+ "In this case Bokeh will automatically create a legend that shows a representation of that glyph, labeled by the test you provided. A full example is below."
928
+ ]
929
+ },
930
+ {
931
+ "cell_type": "code",
932
+ "execution_count": 8,
933
+ "metadata": {},
934
+ "outputs": [
935
+ {
936
+ "data": {
937
+ "text/html": [
938
+ "\n",
939
+ " <div class=\"bk-root\" id=\"caf13e32-7b8f-4454-b278-a8e7316d7d6c\" data-root-id=\"1731\"></div>\n"
940
+ ]
941
+ },
942
+ "metadata": {},
943
+ "output_type": "display_data"
944
+ },
945
+ {
946
+ "data": {
947
+ "application/javascript": [
948
+ "(function(root) {\n",
949
+ " function embed_document(root) {\n",
950
+ " const docs_json = {\"757471ea-811f-41a0-bc59-b2fc312813dd\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1740\"}],\"center\":[{\"id\":\"1743\"},{\"id\":\"1747\"},{\"id\":\"1779\"}],\"height\":400,\"left\":[{\"id\":\"1744\"}],\"renderers\":[{\"id\":\"1766\"},{\"id\":\"1785\"}],\"title\":{\"id\":\"1768\"},\"toolbar\":{\"id\":\"1755\"},\"width\":800,\"x_range\":{\"id\":\"1732\"},\"x_scale\":{\"id\":\"1736\"},\"y_range\":{\"id\":\"1734\"},\"y_scale\":{\"id\":\"1738\"}},\"id\":\"1731\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"tools\":[{\"id\":\"1748\"},{\"id\":\"1749\"},{\"id\":\"1750\"},{\"id\":\"1751\"},{\"id\":\"1752\"},{\"id\":\"1753\"}]},\"id\":\"1755\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1771\"},\"group\":null,\"major_label_policy\":{\"id\":\"1772\"},\"ticker\":{\"id\":\"1745\"}},\"id\":\"1744\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1774\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1749\",\"type\":\"WheelZoomTool\"},{\"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\":\"1754\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAACRGkt8Vz/AP5EaS3xXP9A/2qdwOgNf2D+RGkt8Vz/gPzXhXVstT+Q/2qdwOgNf6D9+boMZ2W7sP5EaS3xXP/A/433Ua0JH8j814V1bLU/0P4dE50oYV/Y/2qdwOgNf+D8sC/op7mb6P35ugxnZbvw/0NEMCcR2/j+RGkt8Vz8AQDrMD/RMQwFA433Ua0JHAkCML5njN0sDQDXhXVstTwRA3pIi0yJTBUCHROdKGFcGQDD2q8INWwdA2qdwOgNfCECDWTWy+GIJQCwL+inuZgpA1by+oeNqC0B+boMZ2W4MQCcgSJHOcg1A0NEMCcR2DkB5g9GAuXoPQJEaS3xXPxBAZnMtOFLBEEA6zA/0TEMRQA8l8q9HxRFA433Ua0JHEkC41rYnPckSQIwvmeM3SxNAYYh7nzLNE0A14V1bLU8UQAo6QBco0RRA3pIi0yJTFUCz6wSPHdUVQIdE50oYVxZAXJ3JBhPZFkAw9qvCDVsXQAVPjn4I3RdA2qdwOgNfGECuAFP2/eAYQINZNbL4YhlAV7IXbvPkGUAsC/op7mYaQABk3OXo6BpA1by+oeNqG0CpFaFd3uwbQH5ugxnZbhxAUsdl1dPwHEAnIEiRznIdQPt4Kk3J9B1A0NEMCcR2HkCkKu/EvvgeQHmD0YC5eh9ATdyzPLT8H0CRGkt8Vz8gQPtGPNpUgCBAZnMtOFLBIEDQnx6WTwIhQDrMD/RMQyFApPgAUkqEIUAPJfKvR8UhQHlR4w1FBiJA433Ua0JHIkBNqsXJP4giQLjWtic9ySJAIgOohToKI0CML5njN0sjQPZbikE1jCNAYYh7nzLNI0DLtGz9Lw4kQDXhXVstTyRAoA1PuSqQJEAKOkAXKNEkQHRmMXUlEiVA3pIi0yJTJUBJvxMxIJQlQLPrBI8d1SVAHRj27BoWJkCHROdKGFcmQPJw2KgVmCZAXJ3JBhPZJkDGybpkEBonQDD2q8INWydAmyKdIAucJ0AFT45+CN0nQG97f9wFHihA2qdwOgNfKEBE1GGYAKAoQK4AU/b94ChAGC1EVPshKUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"AAAAAAAAAADwgwJ4LjTQP5qI2QHPEuA/+5MNU1HJ5z8ZTT7q2B3vP0aFmgwa+fI/ABg/lCAV9j+IQCEcMdb4P3fOhmLzMPs/EyzujrQb/T/9Izwlj47+PxccgYyLg/8/g6xao7j2/z9mZrL8O+b/P7+X94FZUv8/xVNiW3I9/j9RB8Ai+6v8P5FWKYlppPo/oSg6uxkv+D/Sh2bxK1b1PyZGRbpaJfI/8qg+VZVT7T/4C4p0qOPlP+UppLIiM9w/3FNHxZdVyD/J23zJpD6wv+3ENsZjOdS/wo12/ecH4r/dgWKM2Kjpv2MTsJELcPC/83ixWvXH87+358MBZM72v5eCD4nhdvm/rExY6Hq2+7+TIxAn7YP9vwSssILL1/6/70I4BJ6s/7/vOc8G+P7/vzTGy1KGzf+/3176khQZ/7/C8a4NiuT9vzGcHq/dNPy/l0FFlgER+r+EGZN4xoH3vx8WPFK3kfS/Cli7+O1M8b+HQNqEwoHrv9kfIiFb+OO/gKyggGI52L8EhrXMjDzAvyGGtcyMPMA/jqyggGI52D/gHyIhW/jjP4BA2oTCges/DVi7+O1M8T8cFjxSt5H0P4cZk3jGgfc/lUFFlgER+j8ynB6v3TT8P8Hxrg2K5P0/4F76khQZ/z80xstShs3/P+85zwb4/v8/8EI4BJ6s/z8DrLCCy9f+P5UjECftg/0/p0xY6Hq2+z+Vgg+J4Xb5P7fnwwFkzvY/9nixWvXH8z9dE7CRC3DwP9eBYozYqOk/w412/ecH4j/+xDbGYznUP0/bfMmkPrA/+FNHxZdVyL/UKaSyIjPcv+gLinSo4+W/+Kg+VZVT7b8lRkW6WiXyv8+HZvErVvW/pig6uxkv+L+TVimJaaT6v1EHwCL7q/y/xFNiW3I9/r/Al/eBWVL/v2Zmsvw75v+/g6xao7j2/78YHIGMi4P/v/sjPCWPjv6/EyzujrQb/b94zoZi8zD7v4xAIRwx1vi//Bc/lCAV9r9GhZoMGvnyvx5NPurYHe+/65MNU1HJ57+SiNkBzxLgv/GDAnguNNC/B1wUMyam0bw=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[100]}},\"selected\":{\"id\":\"1798\"},\"selection_policy\":{\"id\":\"1797\"}},\"id\":\"1781\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1780\"},{\"id\":\"1800\"}]},\"id\":\"1779\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1745\",\"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\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1764\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1774\"},\"group\":null,\"major_label_policy\":{\"id\":\"1775\"},\"ticker\":{\"id\":\"1741\"}},\"id\":\"1740\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"orange\",\"line_dash\":[4,4],\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1783\",\"type\":\"Line\"},{\"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\":\"y\"}},\"id\":\"1765\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1775\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1738\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1762\"}},\"id\":\"1767\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"orange\",\"line_dash\":[4,4],\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1784\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAACRGkt8Vz/AP5EaS3xXP9A/2qdwOgNf2D+RGkt8Vz/gPzXhXVstT+Q/2qdwOgNf6D9+boMZ2W7sP5EaS3xXP/A/433Ua0JH8j814V1bLU/0P4dE50oYV/Y/2qdwOgNf+D8sC/op7mb6P35ugxnZbvw/0NEMCcR2/j+RGkt8Vz8AQDrMD/RMQwFA433Ua0JHAkCML5njN0sDQDXhXVstTwRA3pIi0yJTBUCHROdKGFcGQDD2q8INWwdA2qdwOgNfCECDWTWy+GIJQCwL+inuZgpA1by+oeNqC0B+boMZ2W4MQCcgSJHOcg1A0NEMCcR2DkB5g9GAuXoPQJEaS3xXPxBAZnMtOFLBEEA6zA/0TEMRQA8l8q9HxRFA433Ua0JHEkC41rYnPckSQIwvmeM3SxNAYYh7nzLNE0A14V1bLU8UQAo6QBco0RRA3pIi0yJTFUCz6wSPHdUVQIdE50oYVxZAXJ3JBhPZFkAw9qvCDVsXQAVPjn4I3RdA2qdwOgNfGECuAFP2/eAYQINZNbL4YhlAV7IXbvPkGUAsC/op7mYaQABk3OXo6BpA1by+oeNqG0CpFaFd3uwbQH5ugxnZbhxAUsdl1dPwHEAnIEiRznIdQPt4Kk3J9B1A0NEMCcR2HkCkKu/EvvgeQHmD0YC5eh9ATdyzPLT8H0CRGkt8Vz8gQPtGPNpUgCBAZnMtOFLBIEDQnx6WTwIhQDrMD/RMQyFApPgAUkqEIUAPJfKvR8UhQHlR4w1FBiJA433Ua0JHIkBNqsXJP4giQLjWtic9ySJAIgOohToKI0CML5njN0sjQPZbikE1jCNAYYh7nzLNI0DLtGz9Lw4kQDXhXVstTyRAoA1PuSqQJEAKOkAXKNEkQHRmMXUlEiVA3pIi0yJTJUBJvxMxIJQlQLPrBI8d1SVAHRj27BoWJkCHROdKGFcmQPJw2KgVmCZAXJ3JBhPZJkDGybpkEBonQDD2q8INWydAmyKdIAucJ0AFT45+CN0nQG97f9wFHihA2qdwOgNfKEBE1GGYAKAoQK4AU/b94ChAGC1EVPshKUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"AAAAAAAAAADwgwJ4LjTAP5qI2QHPEtA/+5MNU1HJ1z8ZTT7q2B3fP0aFmgwa+eI/ABg/lCAV5j+IQCEcMdboP3fOhmLzMOs/EyzujrQb7T/9Izwlj47uPxccgYyLg+8/g6xao7j27z9mZrL8O+bvP7+X94FZUu8/xVNiW3I97j9RB8Ai+6vsP5FWKYlppOo/oSg6uxkv6D/Sh2bxK1blPyZGRbpaJeI/8qg+VZVT3T/4C4p0qOPVP+UppLIiM8w/3FNHxZdVuD/J23zJpD6gv+3ENsZjOcS/wo12/ecH0r/dgWKM2KjZv2MTsJELcOC/83ixWvXH47+358MBZM7mv5eCD4nhdum/rExY6Hq267+TIxAn7YPtvwSssILL1+6/70I4BJ6s77/vOc8G+P7vvzTGy1KGze+/3176khQZ77/C8a4NiuTtvzGcHq/dNOy/l0FFlgER6r+EGZN4xoHnvx8WPFK3keS/Cli7+O1M4b+HQNqEwoHbv9kfIiFb+NO/gKyggGI5yL8EhrXMjDywvyGGtcyMPLA/jqyggGI5yD/gHyIhW/jTP4BA2oTCgds/DVi7+O1M4T8cFjxSt5HkP4cZk3jGgec/lUFFlgER6j8ynB6v3TTsP8Hxrg2K5O0/4F76khQZ7z80xstShs3vP+85zwb4/u8/8EI4BJ6s7z8DrLCCy9fuP5UjECftg+0/p0xY6Hq26z+Vgg+J4XbpP7fnwwFkzuY/9nixWvXH4z9dE7CRC3DgP9eBYozYqNk/w412/ecH0j/+xDbGYznEP0/bfMmkPqA/+FNHxZdVuL/UKaSyIjPMv+gLinSo49W/+Kg+VZVT3b8lRkW6WiXiv8+HZvErVuW/pig6uxkv6L+TVimJaaTqv1EHwCL7q+y/xFNiW3I97r/Al/eBWVLvv2Zmsvw75u+/g6xao7j2778YHIGMi4Pvv/sjPCWPju6/EyzujrQb7b94zoZi8zDrv4xAIRwx1ui//Bc/lCAV5r9GhZoMGvnivx5NPurYHd+/65MNU1HJ17+SiNkBzxLQv/GDAnguNMC/B1wUMyamwbw=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[100]}},\"selected\":{\"id\":\"1777\"},\"selection_policy\":{\"id\":\"1776\"}},\"id\":\"1762\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1772\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1798\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1763\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1732\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1768\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1762\"},\"glyph\":{\"id\":\"1763\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1765\"},\"nonselection_glyph\":{\"id\":\"1764\"},\"view\":{\"id\":\"1767\"}},\"id\":\"1766\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1734\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"2*sin(x)\"},\"renderers\":[{\"id\":\"1785\"}]},\"id\":\"1800\",\"type\":\"LegendItem\"},{\"attributes\":{\"overlay\":{\"id\":\"1754\"}},\"id\":\"1750\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1753\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1777\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1781\"}},\"id\":\"1786\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1752\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1771\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1741\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1776\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1736\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1748\",\"type\":\"PanTool\"},{\"attributes\":{\"line_color\":\"orange\",\"line_dash\":[4,4],\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1782\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"sin(x)\"},\"renderers\":[{\"id\":\"1766\"}]},\"id\":\"1780\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1781\"},\"glyph\":{\"id\":\"1782\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1784\"},\"nonselection_glyph\":{\"id\":\"1783\"},\"view\":{\"id\":\"1786\"}},\"id\":\"1785\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1751\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1797\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1740\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1743\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1744\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1747\",\"type\":\"Grid\"}],\"root_ids\":[\"1731\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
951
+ " const render_items = [{\"docid\":\"757471ea-811f-41a0-bc59-b2fc312813dd\",\"root_ids\":[\"1731\"],\"roots\":{\"1731\":\"caf13e32-7b8f-4454-b278-a8e7316d7d6c\"}}];\n",
952
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
953
+ " }\n",
954
+ " if (root.Bokeh !== undefined) {\n",
955
+ " embed_document(root);\n",
956
+ " } else {\n",
957
+ " let attempts = 0;\n",
958
+ " const timer = setInterval(function(root) {\n",
959
+ " if (root.Bokeh !== undefined) {\n",
960
+ " clearInterval(timer);\n",
961
+ " embed_document(root);\n",
962
+ " } else {\n",
963
+ " attempts++;\n",
964
+ " if (attempts > 100) {\n",
965
+ " clearInterval(timer);\n",
966
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
967
+ " }\n",
968
+ " }\n",
969
+ " }, 10, root)\n",
970
+ " }\n",
971
+ "})(window);"
972
+ ],
973
+ "application/vnd.bokehjs_exec.v0+json": ""
974
+ },
975
+ "metadata": {
976
+ "application/vnd.bokehjs_exec.v0+json": {
977
+ "id": "1731"
978
+ }
979
+ },
980
+ "output_type": "display_data"
981
+ }
982
+ ],
983
+ "source": [
984
+ "import numpy as np\n",
985
+ "\n",
986
+ "x = np.linspace(0, 4*np.pi, 100)\n",
987
+ "y = np.sin(x)\n",
988
+ "\n",
989
+ "# create a new plot using figure\n",
990
+ "p = figure(\n",
991
+ " plot_height=400,\n",
992
+ " plot_width=800\n",
993
+ ")\n",
994
+ "\n",
995
+ "p.circle(\n",
996
+ " x,\n",
997
+ " y,\n",
998
+ " legend_label=\"sin(x)\"\n",
999
+ ")\n",
1000
+ "p.line(\n",
1001
+ " x,\n",
1002
+ " 2*y,\n",
1003
+ " legend_label=\"2*sin(x)\",\n",
1004
+ " line_dash=[4, 4],\n",
1005
+ " line_color=\"orange\",\n",
1006
+ " line_width=2\n",
1007
+ ")\n",
1008
+ "\n",
1009
+ "# show the results\n",
1010
+ "show(p)"
1011
+ ]
1012
+ },
1013
+ {
1014
+ "cell_type": "markdown",
1015
+ "metadata": {},
1016
+ "source": [
1017
+ "#### Compound legends\n",
1018
+ "\n",
1019
+ "In the example above, we provided a different legend label to each glyph method. Sometimes, two (or more) different glyphs are used with a single data source. In this case, you can make compound legends by specifying the same legend argument to multiple glyph methods when creating a plot, for example, if you plot a `sin` curve with both a line and a marker, you may give them the same label to cause them to show up together in the legend:\n",
1020
+ "\n",
1021
+ "```python\n",
1022
+ "p.circle(x, y, legend_label=\"sin(x)\")\n",
1023
+ "p.line(x, y, legend_label=\"sin(x)\", line_dash=[4, 4], line_color=\"orange\", line_width=2)\n",
1024
+ "```\n"
1025
+ ]
1026
+ },
1027
+ {
1028
+ "cell_type": "markdown",
1029
+ "metadata": {},
1030
+ "source": [
1031
+ "### Color bars\n",
1032
+ "\n",
1033
+ "Color bars are especially useful if we vary the color of a glyph according to some color mapping. Bokeh color bars are configured with a color mapper and added to plots with the `add_layout` method:\n",
1034
+ "```python\n",
1035
+ "color_mapper = LinearColorMapper(palette=\"Viridis256\", low=data_low, high=data_high)\n",
1036
+ "color_bar = ColorBar(color_mapper=color_mapper, location=(0,0))\n",
1037
+ "p.add_layout(color_bar, 'right')\n",
1038
+ "```\n",
1039
+ "The example below shows a complete example that also uses the color mapper to transform the glyph color."
1040
+ ]
1041
+ },
1042
+ {
1043
+ "cell_type": "code",
1044
+ "execution_count": 9,
1045
+ "metadata": {},
1046
+ "outputs": [
1047
+ {
1048
+ "data": {
1049
+ "text/html": [
1050
+ "\n",
1051
+ " <div class=\"bk-root\" id=\"7165e697-8ca7-40b3-848f-8760ef697c15\" data-root-id=\"1963\"></div>\n"
1052
+ ]
1053
+ },
1054
+ "metadata": {},
1055
+ "output_type": "display_data"
1056
+ },
1057
+ {
1058
+ "data": {
1059
+ "application/javascript": [
1060
+ "(function(root) {\n",
1061
+ " function embed_document(root) {\n",
1062
+ " const docs_json = {\"9acf83f9-9557-42d6-8239-020b657bb0b7\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1972\"}],\"center\":[{\"id\":\"1975\"},{\"id\":\"1979\"}],\"height\":400,\"left\":[{\"id\":\"1976\"}],\"renderers\":[{\"id\":\"1986\"}],\"right\":[{\"id\":\"1988\"}],\"title\":{\"id\":\"2066\"},\"toolbar\":{\"id\":\"1980\"},\"toolbar_location\":null,\"width\":800,\"x_range\":{\"id\":\"1964\"},\"x_scale\":{\"id\":\"1968\"},\"y_range\":{\"id\":\"1966\"},\"y_scale\":{\"id\":\"1970\"}},\"id\":\"1963\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis_label\":\"Horsepower\",\"coordinates\":null,\"formatter\":{\"id\":\"2073\"},\"group\":null,\"major_label_policy\":{\"id\":\"2074\"},\"ticker\":{\"id\":\"1973\"}},\"id\":\"1972\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1968\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1970\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2073\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis_label\":\"MPG\",\"coordinates\":null,\"formatter\":{\"id\":\"2069\"},\"group\":null,\"major_label_policy\":{\"id\":\"2070\"},\"ticker\":{\"id\":\"1977\"}},\"id\":\"1976\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1973\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2074\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1977\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2070\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2069\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2075\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1980\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1972\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1975\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2071\",\"type\":\"NoOverlap\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.6},\"fill_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"hatch_alpha\":{\"value\":0.6},\"hatch_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"line_alpha\":{\"value\":0.6},\"line_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"size\":{\"value\":20},\"x\":{\"field\":\"hp\"},\"y\":{\"field\":\"mpg\"}},\"id\":\"1983\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"size\":{\"value\":20},\"x\":{\"field\":\"hp\"},\"y\":{\"field\":\"mpg\"}},\"id\":\"1984\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2076\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"accel\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[392]},\"cyl\":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,6,6,6,4,4,4,4,4,4,6,8,8,8,8,4,4,4,6,6,6,6,6,8,8,8,8,8,8,8,6,4,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,3,8,8,8,8,4,4,4,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,8,8,6,6,6,6,6,4,8,8,8,8,6,4,4,4,3,4,6,4,8,8,4,4,4,4,8,4,6,8,6,6,6,4,4,4,4,6,6,6,8,8,8,8,8,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,8,8,8,8,6,6,6,6,6,8,8,4,4,6,4,4,4,4,6,4,6,4,4,4,4,4,4,4,4,4,4,8,8,8,8,6,6,6,6,4,4,4,4,6,6,6,6,4,4,4,4,4,8,4,6,6,8,8,8,8,4,4,4,4,4,8,8,8,8,6,6,6,6,8,8,8,8,4,4,4,4,4,4,4,4,6,4,3,4,4,4,4,4,8,8,8,6,6,6,4,6,6,6,6,6,6,8,6,8,8,4,4,4,4,4,4,4,4,5,6,4,6,4,4,6,6,4,6,6,8,8,8,8,8,8,8,8,4,4,4,4,5,8,4,8,4,4,4,4,4,6,6,4,4,4,4,4,4,4,4,6,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,6,3,4,4,4,4,4,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,8,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,4,6,4,4,4,4,4,4,4,4],\"displ\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[392]},\"hp\":[130,165,150,150,140,198,220,215,225,190,170,160,150,225,95,95,97,85,88,46,87,90,95,113,90,215,200,210,193,88,90,95,100,105,100,88,100,165,175,153,150,180,170,175,110,72,100,88,86,90,70,76,65,69,60,70,95,80,54,90,86,165,175,150,153,150,208,155,160,190,97,150,130,140,150,112,76,87,69,86,92,97,80,88,175,150,145,137,150,198,150,158,150,215,225,175,105,100,100,88,95,46,150,167,170,180,100,88,72,94,90,85,107,90,145,230,49,75,91,112,150,110,122,180,95,100,100,67,80,65,75,100,110,105,140,150,150,140,150,83,67,78,52,61,75,75,75,97,93,67,95,105,72,72,170,145,150,148,110,105,110,95,110,110,129,75,83,100,78,96,71,97,97,70,90,95,88,98,115,53,86,81,92,79,83,140,150,120,152,100,105,81,90,52,60,70,53,100,78,110,95,71,70,75,72,102,150,88,108,120,180,145,130,150,68,80,58,96,70,145,110,145,130,110,105,100,98,180,170,190,149,78,88,75,89,63,83,67,78,97,110,110,48,66,52,70,60,110,140,139,105,95,85,88,100,90,105,85,110,120,145,165,139,140,68,95,97,75,95,105,85,97,103,125,115,133,71,68,115,85,88,90,110,130,129,138,135,155,142,125,150,71,65,80,80,77,125,71,90,70,70,65,69,90,115,115,90,76,60,70,65,90,88,90,90,78,90,75,92,75,65,105,65,48,48,67,67,67,67,62,132,100,88,72,84,84,92,110,84,58,64,60,67,65,62,68,63,65,65,74,75,75,100,74,80,76,116,120,110,105,88,85,88,88,88,85,84,90,92,74,68,68,63,70,88,75,70,67,67,67,110,85,92,112,96,84,90,86,52,84,79,82],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391],\"mpg\":{\"__ndarray__\":\"AAAAAAAAMkAAAAAAAAAuQAAAAAAAADJAAAAAAAAAMEAAAAAAAAAxQAAAAAAAAC5AAAAAAAAALEAAAAAAAAAsQAAAAAAAACxAAAAAAAAALkAAAAAAAAAuQAAAAAAAACxAAAAAAAAALkAAAAAAAAAsQAAAAAAAADhAAAAAAAAANkAAAAAAAAAyQAAAAAAAADVAAAAAAAAAO0AAAAAAAAA6QAAAAAAAADlAAAAAAAAAOEAAAAAAAAA5QAAAAAAAADpAAAAAAAAANUAAAAAAAAAkQAAAAAAAACRAAAAAAAAAJkAAAAAAAAAiQAAAAAAAADtAAAAAAAAAPEAAAAAAAAA5QAAAAAAAADNAAAAAAAAAMEAAAAAAAAAxQAAAAAAAADNAAAAAAAAAMkAAAAAAAAAsQAAAAAAAACxAAAAAAAAALEAAAAAAAAAsQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAqQAAAAAAAADJAAAAAAAAANkAAAAAAAAAzQAAAAAAAADJAAAAAAAAAN0AAAAAAAAA8QAAAAAAAAD5AAAAAAAAAPkAAAAAAAAA/QAAAAAAAgEFAAAAAAAAAO0AAAAAAAAA6QAAAAAAAADhAAAAAAAAAOUAAAAAAAAA3QAAAAAAAADRAAAAAAAAANUAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAsQAAAAAAAADFAAAAAAAAAJkAAAAAAAAAqQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAzQAAAAAAAAC5AAAAAAAAAKkAAAAAAAAAqQAAAAAAAACxAAAAAAAAAMkAAAAAAAAA2QAAAAAAAADVAAAAAAAAAOkAAAAAAAAA2QAAAAAAAADxAAAAAAAAAN0AAAAAAAAA8QAAAAAAAADtAAAAAAAAAKkAAAAAAAAAsQAAAAAAAACpAAAAAAAAALEAAAAAAAAAuQAAAAAAAAChAAAAAAAAAKkAAAAAAAAAqQAAAAAAAACxAAAAAAAAAKkAAAAAAAAAoQAAAAAAAACpAAAAAAAAAMkAAAAAAAAAwQAAAAAAAADJAAAAAAAAAMkAAAAAAAAA3QAAAAAAAADpAAAAAAAAAJkAAAAAAAAAoQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAyQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADJAAAAAAAAAM0AAAAAA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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[392]},\"name\":[\"chevrolet chevelle malibu\",\"buick skylark 320\",\"plymouth satellite\",\"amc rebel sst\",\"ford torino\",\"ford galaxie 500\",\"chevrolet impala\",\"plymouth fury iii\",\"pontiac catalina\",\"amc ambassador dpl\",\"dodge challenger se\",\"plymouth 'cuda 340\",\"chevrolet monte carlo\",\"buick estate wagon (sw)\",\"toyota corona mark ii\",\"plymouth duster\",\"amc hornet\",\"ford maverick\",\"datsun pl510\",\"volkswagen 1131 deluxe sedan\",\"peugeot 504\",\"audi 100 ls\",\"saab 99e\",\"bmw 2002\",\"amc gremlin\",\"ford f250\",\"chevy c20\",\"dodge d200\",\"hi 1200d\",\"datsun pl510\",\"chevrolet vega 2300\",\"toyota corona\",\"amc gremlin\",\"plymouth satellite custom\",\"chevrolet chevelle malibu\",\"ford torino 500\",\"amc matador\",\"chevrolet impala\",\"pontiac catalina brougham\",\"ford galaxie 500\",\"plymouth fury iii\",\"dodge monaco (sw)\",\"ford country squire (sw)\",\"pontiac safari (sw)\",\"amc hornet sportabout (sw)\",\"chevrolet vega (sw)\",\"pontiac firebird\",\"ford mustang\",\"mercury capri 2000\",\"opel 1900\",\"peugeot 304\",\"fiat 124b\",\"toyota corolla 1200\",\"datsun 1200\",\"volkswagen model 111\",\"plymouth cricket\",\"toyota corona hardtop\",\"dodge colt hardtop\",\"volkswagen type 3\",\"chevrolet vega\",\"ford pinto runabout\",\"chevrolet impala\",\"pontiac catalina\",\"plymouth fury iii\",\"ford galaxie 500\",\"amc ambassador sst\",\"mercury marquis\",\"buick lesabre custom\",\"oldsmobile delta 88 royale\",\"chrysler newport royal\",\"mazda rx2 coupe\",\"amc matador (sw)\",\"chevrolet chevelle concours (sw)\",\"ford gran torino (sw)\",\"plymouth satellite custom (sw)\",\"volvo 145e (sw)\",\"volkswagen 411 (sw)\",\"peugeot 504 (sw)\",\"renault 12 (sw)\",\"ford pinto (sw)\",\"datsun 510 (sw)\",\"toyouta corona mark ii (sw)\",\"dodge colt (sw)\",\"toyota corolla 1600 (sw)\",\"buick century 350\",\"amc matador\",\"chevrolet malibu\",\"ford gran torino\",\"dodge coronet custom\",\"mercury marquis brougham\",\"chevrolet caprice classic\",\"ford ltd\",\"plymouth fury gran sedan\",\"chrysler new yorker brougham\",\"buick electra 225 custom\",\"amc ambassador brougham\",\"plymouth valiant\",\"chevrolet nova custom\",\"amc hornet\",\"ford maverick\",\"plymouth duster\",\"volkswagen super beetle\",\"chevrolet impala\",\"ford country\",\"plymouth custom suburb\",\"oldsmobile vista cruiser\",\"amc gremlin\",\"toyota carina\",\"chevrolet vega\",\"datsun 610\",\"maxda rx3\",\"ford pinto\",\"mercury capri v6\",\"fiat 124 sport coupe\",\"chevrolet monte carlo s\",\"pontiac grand prix\",\"fiat 128\",\"opel manta\",\"audi 100ls\",\"volvo 144ea\",\"dodge dart custom\",\"saab 99le\",\"toyota mark ii\",\"oldsmobile omega\",\"plymouth duster\",\"amc hornet\",\"chevrolet nova\",\"datsun b210\",\"ford pinto\",\"toyota corolla 1200\",\"chevrolet vega\",\"chevrolet chevelle malibu classic\",\"amc matador\",\"plymouth satellite sebring\",\"ford gran torino\",\"buick century luxus (sw)\",\"dodge coronet custom (sw)\",\"ford gran torino (sw)\",\"amc matador (sw)\",\"audi fox\",\"volkswagen dasher\",\"opel manta\",\"toyota corona\",\"datsun 710\",\"dodge colt\",\"fiat 128\",\"fiat 124 tc\",\"honda civic\",\"subaru\",\"fiat x1.9\",\"plymouth valiant custom\",\"chevrolet nova\",\"mercury monarch\",\"ford maverick\",\"pontiac catalina\",\"chevrolet bel air\",\"plymouth grand fury\",\"ford ltd\",\"buick century\",\"chevroelt chevelle malibu\",\"amc matador\",\"plymouth fury\",\"buick skyhawk\",\"chevrolet monza 2+2\",\"ford mustang ii\",\"toyota corolla\",\"ford pinto\",\"amc gremlin\",\"pontiac astro\",\"toyota corona\",\"volkswagen dasher\",\"datsun 710\",\"ford pinto\",\"volkswagen rabbit\",\"amc pacer\",\"audi 100ls\",\"peugeot 504\",\"volvo 244dl\",\"saab 99le\",\"honda civic cvcc\",\"fiat 131\",\"opel 1900\",\"capri ii\",\"dodge colt\",\"renault 12tl\",\"chevrolet chevelle malibu classic\",\"dodge coronet brougham\",\"amc matador\",\"ford gran torino\",\"plymouth valiant\",\"chevrolet nova\",\"ford maverick\",\"amc hornet\",\"chevrolet chevette\",\"chevrolet woody\",\"vw rabbit\",\"honda civic\",\"dodge aspen se\",\"ford granada ghia\",\"pontiac ventura sj\",\"amc pacer d/l\",\"volkswagen rabbit\",\"datsun b-210\",\"toyota corolla\",\"ford pinto\",\"volvo 245\",\"plymouth volare premier v8\",\"peugeot 504\",\"toyota mark ii\",\"mercedes-benz 280s\",\"cadillac seville\",\"chevy c10\",\"ford f108\",\"dodge d100\",\"honda accord cvcc\",\"buick opel isuzu deluxe\",\"renault 5 gtl\",\"plymouth arrow gs\",\"datsun f-10 hatchback\",\"chevrolet caprice classic\",\"oldsmobile cutlass supreme\",\"dodge monaco brougham\",\"mercury cougar brougham\",\"chevrolet concours\",\"buick skylark\",\"plymouth volare custom\",\"ford granada\",\"pontiac grand prix lj\",\"chevrolet monte carlo landau\",\"chrysler cordoba\",\"ford thunderbird\",\"volkswagen rabbit custom\",\"pontiac sunbird coupe\",\"toyota corolla liftback\",\"ford mustang ii 2+2\",\"chevrolet chevette\",\"dodge colt m/m\",\"subaru dl\",\"volkswagen dasher\",\"datsun 810\",\"bmw 320i\",\"mazda rx-4\",\"volkswagen rabbit custom diesel\",\"ford fiesta\",\"mazda glc deluxe\",\"datsun b210 gx\",\"honda civic cvcc\",\"oldsmobile cutlass salon brougham\",\"dodge diplomat\",\"mercury monarch ghia\",\"pontiac phoenix lj\",\"chevrolet malibu\",\"ford fairmont (auto)\",\"ford fairmont (man)\",\"plymouth volare\",\"amc concord\",\"buick century special\",\"mercury zephyr\",\"dodge aspen\",\"amc concord d/l\",\"chevrolet monte carlo landau\",\"buick regal sport coupe (turbo)\",\"ford futura\",\"dodge magnum xe\",\"chevrolet chevette\",\"toyota corona\",\"datsun 510\",\"dodge omni\",\"toyota celica gt liftback\",\"plymouth sapporo\",\"oldsmobile starfire sx\",\"datsun 200-sx\",\"audi 5000\",\"volvo 264gl\",\"saab 99gle\",\"peugeot 604sl\",\"volkswagen scirocco\",\"honda accord lx\",\"pontiac lemans v6\",\"mercury zephyr 6\",\"ford fairmont 4\",\"amc concord dl 6\",\"dodge aspen 6\",\"chevrolet caprice classic\",\"ford ltd landau\",\"mercury grand marquis\",\"dodge st. regis\",\"buick estate wagon (sw)\",\"ford country squire (sw)\",\"chevrolet malibu classic (sw)\",\"chrysler lebaron town @ country (sw)\",\"vw rabbit custom\",\"maxda glc deluxe\",\"dodge colt hatchback custom\",\"amc spirit dl\",\"mercedes benz 300d\",\"cadillac eldorado\",\"peugeot 504\",\"oldsmobile cutlass salon brougham\",\"plymouth horizon\",\"plymouth horizon tc3\",\"datsun 210\",\"fiat strada custom\",\"buick skylark limited\",\"chevrolet citation\",\"oldsmobile omega brougham\",\"pontiac phoenix\",\"vw rabbit\",\"toyota corolla tercel\",\"chevrolet chevette\",\"datsun 310\",\"chevrolet citation\",\"ford fairmont\",\"amc concord\",\"dodge aspen\",\"audi 4000\",\"toyota corona liftback\",\"mazda 626\",\"datsun 510 hatchback\",\"toyota corolla\",\"mazda glc\",\"dodge colt\",\"datsun 210\",\"vw rabbit c (diesel)\",\"vw dasher (diesel)\",\"audi 5000s (diesel)\",\"mercedes-benz 240d\",\"honda civic 1500 gl\",\"subaru dl\",\"vokswagen rabbit\",\"datsun 280-zx\",\"mazda rx-7 gs\",\"triumph tr7 coupe\",\"honda accord\",\"plymouth reliant\",\"buick skylark\",\"dodge aries wagon (sw)\",\"chevrolet citation\",\"plymouth reliant\",\"toyota starlet\",\"plymouth champ\",\"honda civic 1300\",\"subaru\",\"datsun 210 mpg\",\"toyota tercel\",\"mazda glc 4\",\"plymouth horizon 4\",\"ford escort 4w\",\"ford escort 2h\",\"volkswagen jetta\",\"honda prelude\",\"toyota corolla\",\"datsun 200sx\",\"mazda 626\",\"peugeot 505s turbo diesel\",\"volvo diesel\",\"toyota cressida\",\"datsun 810 maxima\",\"buick century\",\"oldsmobile cutlass ls\",\"ford granada gl\",\"chrysler lebaron salon\",\"chevrolet cavalier\",\"chevrolet cavalier wagon\",\"chevrolet cavalier 2-door\",\"pontiac j2000 se hatchback\",\"dodge aries se\",\"pontiac phoenix\",\"ford fairmont futura\",\"volkswagen rabbit l\",\"mazda glc custom l\",\"mazda glc custom\",\"plymouth horizon miser\",\"mercury lynx l\",\"nissan stanza xe\",\"honda accord\",\"toyota corolla\",\"honda civic\",\"honda civic (auto)\",\"datsun 310 gx\",\"buick century limited\",\"oldsmobile cutlass ciera (diesel)\",\"chrysler lebaron medallion\",\"ford granada l\",\"toyota celica gt\",\"dodge charger 2.2\",\"chevrolet camaro\",\"ford mustang gl\",\"vw pickup\",\"dodge rampage\",\"ford ranger\",\"chevy s-10\"],\"origin\":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,3,2,2,2,2,2,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,2,1,3,1,2,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,2,2,2,2,1,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,3,1,3,3,1,1,2,1,1,2,2,2,2,1,2,3,1,1,1,1,3,1,3,1,1,1,1,1,1,1,1,1,2,2,2,3,3,1,2,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,3,2,3,1,2,1,2,2,2,2,3,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,2,3,3,1,2,1,2,3,2,1,1,1,1,3,1,2,1,3,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,1,1,1,3,2,3,2,3,2,1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,3,1,1,3,2,2,2,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1,2,1,2,1,1,1,3,2,1,1,1,1,2,3,1,3,1,1,1,1,2,3,3,3,3,3,1,3,2,2,2,2,3,3,2,3,3,2,3,1,1,1,1,1,3,1,3,3,3,3,3,1,1,1,2,3,3,3,3,2,2,3,3,1,1,1,1,1,1,1,1,1,1,1,2,3,3,1,1,3,3,3,3,3,3,1,1,1,1,3,1,1,1,2,1,1,1],\"weight\":[3504,3693,3436,3433,3449,4341,4354,4312,4425,3850,3563,3609,3761,3086,2372,2833,2774,2587,2130,1835,2672,2430,2375,2234,2648,4615,4376,4382,4732,2130,2264,2228,2634,3439,3329,3302,3288,4209,4464,4154,4096,4955,4746,5140,2962,2408,3282,3139,2220,2123,2074,2065,1773,1613,1834,1955,2278,2126,2254,2408,2226,4274,4385,4135,4129,3672,4633,4502,4456,4422,2330,3892,4098,4294,4077,2933,2511,2979,2189,2395,2288,2506,2164,2100,4100,3672,3988,4042,3777,4952,4464,4363,4237,4735,4951,3821,3121,3278,2945,3021,2904,1950,4997,4906,4654,4499,2789,2279,2401,2379,2124,2310,2472,2265,4082,4278,1867,2158,2582,2868,3399,2660,2807,3664,3102,2901,3336,1950,2451,1836,2542,3781,3632,3613,4141,4699,4457,4638,4257,2219,1963,2300,1649,2003,2125,2108,2246,2489,2391,2000,3264,3459,3432,3158,4668,4440,4498,4657,3907,3897,3730,3785,3039,3221,3169,2171,2639,2914,2592,2702,2223,2545,2984,1937,3211,2694,2957,2945,2671,1795,2464,2220,2572,2255,2202,4215,4190,3962,4215,3233,3353,3012,3085,2035,2164,1937,1795,3651,3574,3645,3193,1825,1990,2155,2565,3150,3940,3270,2930,3820,4380,4055,3870,3755,2045,2155,1825,2300,1945,3880,4060,4140,4295,3520,3425,3630,3525,4220,4165,4325,4335,1940,2740,2265,2755,2051,2075,1985,2190,2815,2600,2720,1985,1800,1985,2070,1800,3365,3735,3570,3535,3155,2965,2720,3430,3210,3380,3070,3620,3410,3425,3445,3205,4080,2155,2560,2300,2230,2515,2745,2855,2405,2830,3140,2795,3410,1990,2135,3245,2990,2890,3265,3360,3840,3725,3955,3830,4360,4054,3605,3940,1925,1975,1915,2670,3530,3900,3190,3420,2200,2150,2020,2130,2670,2595,2700,2556,2144,1968,2120,2019,2678,2870,3003,3381,2188,2711,2542,2434,2265,2110,2800,2110,2085,2335,2950,3250,1850,2145,1845,2910,2420,2500,2290,2490,2635,2620,2725,2385,1755,1875,1760,2065,1975,2050,1985,2215,2045,2380,2190,2210,2350,2615,2635,3230,3160,2900,2930,3415,3725,3060,3465,2605,2640,2395,2575,2525,2735,2865,1980,2025,1970,2125,2125,2160,2205,2245,1965,1965,1995,2945,3015,2585,2835,2665,2370,2950,2790,2130,2295,2625,2720],\"yr\":[70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82]},\"selected\":{\"id\":\"2076\"},\"selection_policy\":{\"id\":\"2075\"}},\"id\":\"1981\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"color_mapper\":{\"id\":\"1944\"},\"coordinates\":null,\"group\":null,\"label_standoff\":12,\"location\":[0,0],\"major_label_policy\":{\"id\":\"2071\"},\"title\":\"Weight\"},\"id\":\"1988\",\"type\":\"ColorBar\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1981\"},\"glyph\":{\"id\":\"1983\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1985\"},\"nonselection_glyph\":{\"id\":\"1984\"},\"view\":{\"id\":\"1987\"}},\"id\":\"1986\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"field\":\"weight\",\"transform\":{\"id\":\"1944\"}},\"size\":{\"value\":20},\"x\":{\"field\":\"hp\"},\"y\":{\"field\":\"mpg\"}},\"id\":\"1985\",\"type\":\"Circle\"},{\"attributes\":{\"high\":5140,\"low\":1613,\"palette\":[\"#440154\",\"#440255\",\"#440357\",\"#450558\",\"#45065A\",\"#45085B\",\"#46095C\",\"#460B5E\",\"#460C5F\",\"#460E61\",\"#470F62\",\"#471163\",\"#471265\",\"#471466\",\"#471567\",\"#471669\",\"#47186A\",\"#48196B\",\"#481A6C\",\"#481C6E\",\"#481D6F\",\"#481E70\",\"#482071\",\"#482172\",\"#482273\",\"#482374\",\"#472575\",\"#472676\",\"#472777\",\"#472878\",\"#472A79\",\"#472B7A\",\"#472C7B\",\"#462D7C\",\"#462F7C\",\"#46307D\",\"#46317E\",\"#45327F\",\"#45347F\",\"#453580\",\"#453681\",\"#443781\",\"#443982\",\"#433A83\",\"#433B83\",\"#433C84\",\"#423D84\",\"#423E85\",\"#424085\",\"#414186\",\"#414286\",\"#404387\",\"#404487\",\"#3F4587\",\"#3F4788\",\"#3E4888\",\"#3E4989\",\"#3D4A89\",\"#3D4B89\",\"#3D4C89\",\"#3C4D8A\",\"#3C4E8A\",\"#3B508A\",\"#3B518A\",\"#3A528B\",\"#3A538B\",\"#39548B\",\"#39558B\",\"#38568B\",\"#38578C\",\"#37588C\",\"#37598C\",\"#365A8C\",\"#365B8C\",\"#355C8C\",\"#355D8C\",\"#345E8D\",\"#345F8D\",\"#33608D\",\"#33618D\",\"#32628D\",\"#32638D\",\"#31648D\",\"#31658D\",\"#31668D\",\"#30678D\",\"#30688D\",\"#2F698D\",\"#2F6A8D\",\"#2E6B8E\",\"#2E6C8E\",\"#2E6D8E\",\"#2D6E8E\",\"#2D6F8E\",\"#2C708E\",\"#2C718E\",\"#2C728E\",\"#2B738E\",\"#2B748E\",\"#2A758E\",\"#2A768E\",\"#2A778E\",\"#29788E\",\"#29798E\",\"#287A8E\",\"#287A8E\",\"#287B8E\",\"#277C8E\",\"#277D8E\",\"#277E8E\",\"#267F8E\",\"#26808E\",\"#26818E\",\"#25828E\",\"#25838D\",\"#24848D\",\"#24858D\",\"#24868D\",\"#23878D\",\"#23888D\",\"#23898D\",\"#22898D\",\"#228A8D\",\"#228B8D\",\"#218C8D\",\"#218D8C\",\"#218E8C\",\"#208F8C\",\"#20908C\",\"#20918C\",\"#1F928C\",\"#1F938B\",\"#1F948B\",\"#1F958B\",\"#1F968B\",\"#1E978A\",\"#1E988A\",\"#1E998A\",\"#1E998A\",\"#1E9A89\",\"#1E9B89\",\"#1E9C89\",\"#1E9D88\",\"#1E9E88\",\"#1E9F88\",\"#1EA087\",\"#1FA187\",\"#1FA286\",\"#1FA386\",\"#20A485\",\"#20A585\",\"#21A685\",\"#21A784\",\"#22A784\",\"#23A883\",\"#23A982\",\"#24AA82\",\"#25AB81\",\"#26AC81\",\"#27AD80\",\"#28AE7F\",\"#29AF7F\",\"#2AB07E\",\"#2BB17D\",\"#2CB17D\",\"#2EB27C\",\"#2FB37B\",\"#30B47A\",\"#32B57A\",\"#33B679\",\"#35B778\",\"#36B877\",\"#38B976\",\"#39B976\",\"#3BBA75\",\"#3DBB74\",\"#3EBC73\",\"#40BD72\",\"#42BE71\",\"#44BE70\",\"#45BF6F\",\"#47C06E\",\"#49C16D\",\"#4BC26C\",\"#4DC26B\",\"#4FC369\",\"#51C468\",\"#53C567\",\"#55C666\",\"#57C665\",\"#59C764\",\"#5BC862\",\"#5EC961\",\"#60C960\",\"#62CA5F\",\"#64CB5D\",\"#67CC5C\",\"#69CC5B\",\"#6BCD59\",\"#6DCE58\",\"#70CE56\",\"#72CF55\",\"#74D054\",\"#77D052\",\"#79D151\",\"#7CD24F\",\"#7ED24E\",\"#81D34C\",\"#83D34B\",\"#86D449\",\"#88D547\",\"#8BD546\",\"#8DD644\",\"#90D643\",\"#92D741\",\"#95D73F\",\"#97D83E\",\"#9AD83C\",\"#9DD93A\",\"#9FD938\",\"#A2DA37\",\"#A5DA35\",\"#A7DB33\",\"#AADB32\",\"#ADDC30\",\"#AFDC2E\",\"#B2DD2C\",\"#B5DD2B\",\"#B7DD29\",\"#BADE27\",\"#BDDE26\",\"#BFDF24\",\"#C2DF22\",\"#C5DF21\",\"#C7E01F\",\"#CAE01E\",\"#CDE01D\",\"#CFE11C\",\"#D2E11B\",\"#D4E11A\",\"#D7E219\",\"#DAE218\",\"#DCE218\",\"#DFE318\",\"#E1E318\",\"#E4E318\",\"#E7E419\",\"#E9E419\",\"#ECE41A\",\"#EEE51B\",\"#F1E51C\",\"#F3E51E\",\"#F6E61F\",\"#F8E621\",\"#FAE622\",\"#FDE724\"]},\"id\":\"1944\",\"type\":\"LinearColorMapper\"},{\"attributes\":{},\"id\":\"1966\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1964\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1981\"}},\"id\":\"1987\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1976\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1979\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2066\",\"type\":\"Title\"}],\"root_ids\":[\"1963\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
1063
+ " const render_items = [{\"docid\":\"9acf83f9-9557-42d6-8239-020b657bb0b7\",\"root_ids\":[\"1963\"],\"roots\":{\"1963\":\"7165e697-8ca7-40b3-848f-8760ef697c15\"}}];\n",
1064
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
1065
+ " }\n",
1066
+ " if (root.Bokeh !== undefined) {\n",
1067
+ " embed_document(root);\n",
1068
+ " } else {\n",
1069
+ " let attempts = 0;\n",
1070
+ " const timer = setInterval(function(root) {\n",
1071
+ " if (root.Bokeh !== undefined) {\n",
1072
+ " clearInterval(timer);\n",
1073
+ " embed_document(root);\n",
1074
+ " } else {\n",
1075
+ " attempts++;\n",
1076
+ " if (attempts > 100) {\n",
1077
+ " clearInterval(timer);\n",
1078
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
1079
+ " }\n",
1080
+ " }\n",
1081
+ " }, 10, root)\n",
1082
+ " }\n",
1083
+ "})(window);"
1084
+ ],
1085
+ "application/vnd.bokehjs_exec.v0+json": ""
1086
+ },
1087
+ "metadata": {
1088
+ "application/vnd.bokehjs_exec.v0+json": {
1089
+ "id": "1963"
1090
+ }
1091
+ },
1092
+ "output_type": "display_data"
1093
+ }
1094
+ ],
1095
+ "source": [
1096
+ "from bokeh.sampledata.autompg import autompg\n",
1097
+ "\n",
1098
+ "from bokeh.models import LinearColorMapper, ColorBar\n",
1099
+ "from bokeh.transform import transform\n",
1100
+ "\n",
1101
+ "source = ColumnDataSource(autompg)\n",
1102
+ "color_mapper = LinearColorMapper(\n",
1103
+ " palette=\"Viridis256\",\n",
1104
+ " low=autompg.weight.min(),\n",
1105
+ " high=autompg.weight.max()\n",
1106
+ ")\n",
1107
+ "\n",
1108
+ "p = figure(x_axis_label='Horsepower', y_axis_label='MPG', tools='', toolbar_location=None)\n",
1109
+ "\n",
1110
+ "# create a new plot using figure\n",
1111
+ "p = figure(\n",
1112
+ " plot_height=400,\n",
1113
+ " plot_width=800,\n",
1114
+ " x_axis_label='Horsepower',\n",
1115
+ " y_axis_label='MPG',\n",
1116
+ " tools='',\n",
1117
+ " toolbar_location=None\n",
1118
+ ")\n",
1119
+ "\n",
1120
+ "p.circle(\n",
1121
+ " x='hp',\n",
1122
+ " y='mpg',\n",
1123
+ " color=transform(\n",
1124
+ " 'weight',\n",
1125
+ " color_mapper\n",
1126
+ " ),\n",
1127
+ " size=20,\n",
1128
+ " alpha=0.6,\n",
1129
+ " source=autompg\n",
1130
+ ")\n",
1131
+ "\n",
1132
+ "color_bar = ColorBar(\n",
1133
+ " color_mapper=color_mapper,\n",
1134
+ " label_standoff=12,\n",
1135
+ " location=(0,0),\n",
1136
+ " title='Weight'\n",
1137
+ ")\n",
1138
+ "p.add_layout(color_bar, 'right')\n",
1139
+ "\n",
1140
+ "# show the results\n",
1141
+ "show(p)"
1142
+ ]
1143
+ }
1144
+ ],
1145
+ "metadata": {
1146
+ "anaconda-cloud": {},
1147
+ "kernelspec": {
1148
+ "display_name": "Python 3",
1149
+ "language": "python",
1150
+ "name": "python3"
1151
+ },
1152
+ "language_info": {
1153
+ "codemirror_mode": {
1154
+ "name": "ipython",
1155
+ "version": 3
1156
+ },
1157
+ "file_extension": ".py",
1158
+ "mimetype": "text/x-python",
1159
+ "name": "python",
1160
+ "nbconvert_exporter": "python",
1161
+ "pygments_lexer": "ipython3",
1162
+ "version": "3.7.9"
1163
+ }
1164
+ },
1165
+ "nbformat": 4,
1166
+ "nbformat_minor": 4
1167
+ }