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,1440 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {
6
+ "Collapsed": "false"
7
+ },
8
+ "source": [
9
+ "<table style=\"float:left; border:none\">\n",
10
+ " <tr style=\"border:none\">\n",
11
+ " <td style=\"border:none\">\n",
12
+ " <a href=\"https://bokeh.org/\"> \n",
13
+ " <img \n",
14
+ " src=\"assets/bokeh-transparent.png\" \n",
15
+ " style=\"width:50px\"\n",
16
+ " >\n",
17
+ " </a> \n",
18
+ " </td>\n",
19
+ " <td style=\"border:none\">\n",
20
+ " <h1>Bokeh Tutorial</h1>\n",
21
+ " </td>\n",
22
+ " </tr>\n",
23
+ "</table>\n",
24
+ "\n",
25
+ "<div style=\"float:right;\"><h2>02. Styling and Theming</h2></div>"
26
+ ]
27
+ },
28
+ {
29
+ "cell_type": "markdown",
30
+ "metadata": {
31
+ "Collapsed": "false"
32
+ },
33
+ "source": [
34
+ "In this chapter we will learn how to configure various visual aspects of our plots, and how to find out more about what an be configured. "
35
+ ]
36
+ },
37
+ {
38
+ "cell_type": "markdown",
39
+ "metadata": {},
40
+ "source": [
41
+ "# Imports and Setup\n",
42
+ "\n",
43
+ "First, let's make the standard imports"
44
+ ]
45
+ },
46
+ {
47
+ "cell_type": "code",
48
+ "execution_count": 1,
49
+ "metadata": {
50
+ "Collapsed": "false"
51
+ },
52
+ "outputs": [],
53
+ "source": [
54
+ "from bokeh.io import output_notebook, show\n",
55
+ "from bokeh.plotting import figure"
56
+ ]
57
+ },
58
+ {
59
+ "cell_type": "code",
60
+ "execution_count": 2,
61
+ "metadata": {
62
+ "Collapsed": "false"
63
+ },
64
+ "outputs": [
65
+ {
66
+ "data": {
67
+ "text/html": [
68
+ "<div class=\"bk-root\">\n",
69
+ " <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
70
+ " <span id=\"1002\">Loading BokehJS ...</span>\n",
71
+ " </div>\n"
72
+ ]
73
+ },
74
+ "metadata": {},
75
+ "output_type": "display_data"
76
+ },
77
+ {
78
+ "data": {
79
+ "application/javascript": [
80
+ "(function(root) {\n",
81
+ " function now() {\n",
82
+ " return new Date();\n",
83
+ " }\n",
84
+ "\n",
85
+ " const force = true;\n",
86
+ "\n",
87
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
88
+ " root._bokeh_onload_callbacks = [];\n",
89
+ " root._bokeh_is_loading = undefined;\n",
90
+ " }\n",
91
+ "\n",
92
+ "const JS_MIME_TYPE = 'application/javascript';\n",
93
+ " const HTML_MIME_TYPE = 'text/html';\n",
94
+ " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
95
+ " const CLASS_NAME = 'output_bokeh rendered_html';\n",
96
+ "\n",
97
+ " /**\n",
98
+ " * Render data to the DOM node\n",
99
+ " */\n",
100
+ " function render(props, node) {\n",
101
+ " const script = document.createElement(\"script\");\n",
102
+ " node.appendChild(script);\n",
103
+ " }\n",
104
+ "\n",
105
+ " /**\n",
106
+ " * Handle when an output is cleared or removed\n",
107
+ " */\n",
108
+ " function handleClearOutput(event, handle) {\n",
109
+ " const cell = handle.cell;\n",
110
+ "\n",
111
+ " const id = cell.output_area._bokeh_element_id;\n",
112
+ " const server_id = cell.output_area._bokeh_server_id;\n",
113
+ " // Clean up Bokeh references\n",
114
+ " if (id != null && id in Bokeh.index) {\n",
115
+ " Bokeh.index[id].model.document.clear();\n",
116
+ " delete Bokeh.index[id];\n",
117
+ " }\n",
118
+ "\n",
119
+ " if (server_id !== undefined) {\n",
120
+ " // Clean up Bokeh references\n",
121
+ " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
122
+ " cell.notebook.kernel.execute(cmd_clean, {\n",
123
+ " iopub: {\n",
124
+ " output: function(msg) {\n",
125
+ " const id = msg.content.text.trim();\n",
126
+ " if (id in Bokeh.index) {\n",
127
+ " Bokeh.index[id].model.document.clear();\n",
128
+ " delete Bokeh.index[id];\n",
129
+ " }\n",
130
+ " }\n",
131
+ " }\n",
132
+ " });\n",
133
+ " // Destroy server and session\n",
134
+ " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
135
+ " cell.notebook.kernel.execute(cmd_destroy);\n",
136
+ " }\n",
137
+ " }\n",
138
+ "\n",
139
+ " /**\n",
140
+ " * Handle when a new output is added\n",
141
+ " */\n",
142
+ " function handleAddOutput(event, handle) {\n",
143
+ " const output_area = handle.output_area;\n",
144
+ " const output = handle.output;\n",
145
+ "\n",
146
+ " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
147
+ " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n",
148
+ " return\n",
149
+ " }\n",
150
+ "\n",
151
+ " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
152
+ "\n",
153
+ " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
154
+ " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
155
+ " // store reference to embed id on output_area\n",
156
+ " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
157
+ " }\n",
158
+ " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
159
+ " const bk_div = document.createElement(\"div\");\n",
160
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
161
+ " const script_attrs = bk_div.children[0].attributes;\n",
162
+ " for (let i = 0; i < script_attrs.length; i++) {\n",
163
+ " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
164
+ " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
165
+ " }\n",
166
+ " // store reference to server id on output_area\n",
167
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
168
+ " }\n",
169
+ " }\n",
170
+ "\n",
171
+ " function register_renderer(events, OutputArea) {\n",
172
+ "\n",
173
+ " function append_mime(data, metadata, element) {\n",
174
+ " // create a DOM node to render to\n",
175
+ " const toinsert = this.create_output_subarea(\n",
176
+ " metadata,\n",
177
+ " CLASS_NAME,\n",
178
+ " EXEC_MIME_TYPE\n",
179
+ " );\n",
180
+ " this.keyboard_manager.register_events(toinsert);\n",
181
+ " // Render to node\n",
182
+ " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
183
+ " render(props, toinsert[toinsert.length - 1]);\n",
184
+ " element.append(toinsert);\n",
185
+ " return toinsert\n",
186
+ " }\n",
187
+ "\n",
188
+ " /* Handle when an output is cleared or removed */\n",
189
+ " events.on('clear_output.CodeCell', handleClearOutput);\n",
190
+ " events.on('delete.Cell', handleClearOutput);\n",
191
+ "\n",
192
+ " /* Handle when a new output is added */\n",
193
+ " events.on('output_added.OutputArea', handleAddOutput);\n",
194
+ "\n",
195
+ " /**\n",
196
+ " * Register the mime type and append_mime function with output_area\n",
197
+ " */\n",
198
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
199
+ " /* Is output safe? */\n",
200
+ " safe: true,\n",
201
+ " /* Index of renderer in `output_area.display_order` */\n",
202
+ " index: 0\n",
203
+ " });\n",
204
+ " }\n",
205
+ "\n",
206
+ " // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
207
+ " if (root.Jupyter !== undefined) {\n",
208
+ " const events = require('base/js/events');\n",
209
+ " const OutputArea = require('notebook/js/outputarea').OutputArea;\n",
210
+ "\n",
211
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
212
+ " register_renderer(events, OutputArea);\n",
213
+ " }\n",
214
+ " }\n",
215
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
216
+ " root._bokeh_timeout = Date.now() + 5000;\n",
217
+ " root._bokeh_failed_load = false;\n",
218
+ " }\n",
219
+ "\n",
220
+ " const NB_LOAD_WARNING = {'data': {'text/html':\n",
221
+ " \"<div style='background-color: #fdd'>\\n\"+\n",
222
+ " \"<p>\\n\"+\n",
223
+ " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
224
+ " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
225
+ " \"</p>\\n\"+\n",
226
+ " \"<ul>\\n\"+\n",
227
+ " \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
228
+ " \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
229
+ " \"</ul>\\n\"+\n",
230
+ " \"<code>\\n\"+\n",
231
+ " \"from bokeh.resources import INLINE\\n\"+\n",
232
+ " \"output_notebook(resources=INLINE)\\n\"+\n",
233
+ " \"</code>\\n\"+\n",
234
+ " \"</div>\"}};\n",
235
+ "\n",
236
+ " function display_loaded() {\n",
237
+ " const el = document.getElementById(\"1002\");\n",
238
+ " if (el != null) {\n",
239
+ " el.textContent = \"BokehJS is loading...\";\n",
240
+ " }\n",
241
+ " if (root.Bokeh !== undefined) {\n",
242
+ " if (el != null) {\n",
243
+ " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
244
+ " }\n",
245
+ " } else if (Date.now() < root._bokeh_timeout) {\n",
246
+ " setTimeout(display_loaded, 100)\n",
247
+ " }\n",
248
+ " }\n",
249
+ "\n",
250
+ " function run_callbacks() {\n",
251
+ " try {\n",
252
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
253
+ " if (callback != null)\n",
254
+ " callback();\n",
255
+ " });\n",
256
+ " } finally {\n",
257
+ " delete root._bokeh_onload_callbacks\n",
258
+ " }\n",
259
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
260
+ " }\n",
261
+ "\n",
262
+ " function load_libs(css_urls, js_urls, callback) {\n",
263
+ " if (css_urls == null) css_urls = [];\n",
264
+ " if (js_urls == null) js_urls = [];\n",
265
+ "\n",
266
+ " root._bokeh_onload_callbacks.push(callback);\n",
267
+ " if (root._bokeh_is_loading > 0) {\n",
268
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
269
+ " return null;\n",
270
+ " }\n",
271
+ " if (js_urls == null || js_urls.length === 0) {\n",
272
+ " run_callbacks();\n",
273
+ " return null;\n",
274
+ " }\n",
275
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
276
+ " root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
277
+ "\n",
278
+ " function on_load() {\n",
279
+ " root._bokeh_is_loading--;\n",
280
+ " if (root._bokeh_is_loading === 0) {\n",
281
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
282
+ " run_callbacks()\n",
283
+ " }\n",
284
+ " }\n",
285
+ "\n",
286
+ " function on_error(url) {\n",
287
+ " console.error(\"failed to load \" + url);\n",
288
+ " }\n",
289
+ "\n",
290
+ " for (let i = 0; i < css_urls.length; i++) {\n",
291
+ " const url = css_urls[i];\n",
292
+ " const element = document.createElement(\"link\");\n",
293
+ " element.onload = on_load;\n",
294
+ " element.onerror = on_error.bind(null, url);\n",
295
+ " element.rel = \"stylesheet\";\n",
296
+ " element.type = \"text/css\";\n",
297
+ " element.href = url;\n",
298
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
299
+ " document.body.appendChild(element);\n",
300
+ " }\n",
301
+ "\n",
302
+ " for (let i = 0; i < js_urls.length; i++) {\n",
303
+ " const url = js_urls[i];\n",
304
+ " const element = document.createElement('script');\n",
305
+ " element.onload = on_load;\n",
306
+ " element.onerror = on_error.bind(null, url);\n",
307
+ " element.async = false;\n",
308
+ " element.src = url;\n",
309
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
310
+ " document.head.appendChild(element);\n",
311
+ " }\n",
312
+ " };\n",
313
+ "\n",
314
+ " function inject_raw_css(css) {\n",
315
+ " const element = document.createElement(\"style\");\n",
316
+ " element.appendChild(document.createTextNode(css));\n",
317
+ " document.body.appendChild(element);\n",
318
+ " }\n",
319
+ "\n",
320
+ " 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",
321
+ " const css_urls = [];\n",
322
+ "\n",
323
+ " const inline_js = [ function(Bokeh) {\n",
324
+ " Bokeh.set_log_level(\"info\");\n",
325
+ " },\n",
326
+ "function(Bokeh) {\n",
327
+ " }\n",
328
+ " ];\n",
329
+ "\n",
330
+ " function run_inline_js() {\n",
331
+ " if (root.Bokeh !== undefined || force === true) {\n",
332
+ " for (let i = 0; i < inline_js.length; i++) {\n",
333
+ " inline_js[i].call(root, root.Bokeh);\n",
334
+ " }\n",
335
+ "if (force === true) {\n",
336
+ " display_loaded();\n",
337
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
338
+ " setTimeout(run_inline_js, 100);\n",
339
+ " } else if (!root._bokeh_failed_load) {\n",
340
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
341
+ " root._bokeh_failed_load = true;\n",
342
+ " } else if (force !== true) {\n",
343
+ " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n",
344
+ " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
345
+ " }\n",
346
+ " }\n",
347
+ "\n",
348
+ " if (root._bokeh_is_loading === 0) {\n",
349
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
350
+ " run_inline_js();\n",
351
+ " } else {\n",
352
+ " load_libs(css_urls, js_urls, function() {\n",
353
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
354
+ " run_inline_js();\n",
355
+ " });\n",
356
+ " }\n",
357
+ "}(window));"
358
+ ],
359
+ "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));"
360
+ },
361
+ "metadata": {},
362
+ "output_type": "display_data"
363
+ }
364
+ ],
365
+ "source": [
366
+ "output_notebook()"
367
+ ]
368
+ },
369
+ {
370
+ "cell_type": "markdown",
371
+ "metadata": {},
372
+ "source": [
373
+ "This notebook uses Bokeh sample data. If you haven't downloaded it already, this can be downloaded by running the following:"
374
+ ]
375
+ },
376
+ {
377
+ "cell_type": "code",
378
+ "execution_count": 3,
379
+ "metadata": {
380
+ "jupyter": {
381
+ "outputs_hidden": true
382
+ }
383
+ },
384
+ "outputs": [
385
+ {
386
+ "name": "stdout",
387
+ "output_type": "stream",
388
+ "text": [
389
+ "Using data directory: C:\\Users\\jadams\\.bokeh\\data\n",
390
+ "Skipping 'CGM.csv' (checksum match)\n",
391
+ "Skipping 'US_Counties.zip' (checksum match)\n",
392
+ "Skipping 'us_cities.json' (checksum match)\n",
393
+ "Skipping 'unemployment09.csv' (checksum match)\n",
394
+ "Skipping 'AAPL.csv' (checksum match)\n",
395
+ "Skipping 'FB.csv' (checksum match)\n",
396
+ "Skipping 'GOOG.csv' (checksum match)\n",
397
+ "Skipping 'IBM.csv' (checksum match)\n",
398
+ "Skipping 'MSFT.csv' (checksum match)\n",
399
+ "Skipping 'WPP2012_SA_DB03_POPULATION_QUINQUENNIAL.zip' (checksum match)\n",
400
+ "Skipping 'gapminder_fertility.csv' (checksum match)\n",
401
+ "Skipping 'gapminder_population.csv' (checksum match)\n",
402
+ "Skipping 'gapminder_life_expectancy.csv' (checksum match)\n",
403
+ "Skipping 'gapminder_regions.csv' (checksum match)\n",
404
+ "Skipping 'world_cities.zip' (checksum match)\n",
405
+ "Skipping 'airports.json' (checksum match)\n",
406
+ "Skipping 'movies.db.zip' (checksum match)\n",
407
+ "Skipping 'airports.csv' (checksum match)\n",
408
+ "Skipping 'routes.csv' (checksum match)\n",
409
+ "Skipping 'haarcascade_frontalface_default.xml' (checksum match)\n"
410
+ ]
411
+ }
412
+ ],
413
+ "source": [
414
+ "import bokeh.sampledata\n",
415
+ "bokeh.sampledata.download()"
416
+ ]
417
+ },
418
+ {
419
+ "cell_type": "markdown",
420
+ "metadata": {
421
+ "Collapsed": "false"
422
+ },
423
+ "source": [
424
+ "Before we get started, it's useful to describe how colors and properties are specified in Bokeh. \n",
425
+ "\n",
426
+ "# Colors\n",
427
+ "\n",
428
+ "There are many places where you may need to specify colors. Bokeh can accept colors in a variety of different ways:\n",
429
+ "\n",
430
+ "* any of the [140 named HTML/CSS colors](https://www.w3schools.com/colors/colors_names.asp), e.g ``'green'``, ``'indigo'``\n",
431
+ "* an RGB(A) hex value, e.g., ``'#FF0000'``, ``'#44444444'``\n",
432
+ "* a 3-tuple of integers *(r,g,b)* between 0 and 255\n",
433
+ "* a 4-tuple of *(r,g,b,a)* where *r*, *g*, *b* are integers between 0 and 255 and *a* is a floating point value between 0 and 1\n",
434
+ "\n",
435
+ "\n",
436
+ "\n",
437
+ "## Properties\n",
438
+ "\n",
439
+ "Regardless of how a Bokeh plot is created, styling the visual aspects of the plot can always be accomplished by setting attributes on the Bokeh objects that comprise the resulting plot. Visual properties come in three kinds: line, fill, and text properties. For full information with code and examples see the [Styling Visual Properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html) section of the user guide. \n",
440
+ "\n",
441
+ "----\n",
442
+ "\n",
443
+ "### Line Properties\n",
444
+ "\n",
445
+ "Set the visual appearance of lines. The most common are ``line_color``, ``line_alpha``, ``line_width`` and ``line_dash``.\n",
446
+ "\n",
447
+ "### Fill Properties\n",
448
+ "\n",
449
+ "Set the visual appearance of filled areas: ``fill_color`` and ``fill_alpha``.\n",
450
+ "\n",
451
+ "### Text Properties\n",
452
+ "\n",
453
+ "Set the visual appearance of lines of text. The most common are ``text_font``, ``text_font_size``, ``text_color``, and ``text_alpha``.\n",
454
+ "\n",
455
+ "----\n",
456
+ "\n",
457
+ "Sometimes a prefix is used with property names, e.g. to distinguish between different line properties on the same object, or to give a more meaningful name. For example, to set the line width of the plot outline, you would say ``myplot.outline_line_width = 2``. "
458
+ ]
459
+ },
460
+ {
461
+ "cell_type": "markdown",
462
+ "metadata": {
463
+ "Collapsed": "false"
464
+ },
465
+ "source": [
466
+ "# Plots\n",
467
+ "\n",
468
+ "Many top-level attributes of plots (outline, border, etc.) can be configured. See the [Plots](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#plots) section of the styling guide for full information. \n",
469
+ "\n",
470
+ "Here is an example that tweaks the plot outline:"
471
+ ]
472
+ },
473
+ {
474
+ "cell_type": "code",
475
+ "execution_count": 4,
476
+ "metadata": {
477
+ "Collapsed": "false"
478
+ },
479
+ "outputs": [
480
+ {
481
+ "data": {
482
+ "text/html": [
483
+ "\n",
484
+ " <div class=\"bk-root\" id=\"8a2f03ba-56ec-4ad1-94e1-6b0d2e6e8738\" data-root-id=\"1003\"></div>\n"
485
+ ]
486
+ },
487
+ "metadata": {},
488
+ "output_type": "display_data"
489
+ },
490
+ {
491
+ "data": {
492
+ "application/javascript": [
493
+ "(function(root) {\n",
494
+ " function embed_document(root) {\n",
495
+ " const docs_json = {\"0d2d89a6-eb13-4b04-95cc-76154f9321a2\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"}],\"height\":400,\"left\":[{\"id\":\"1016\"}],\"outline_line_alpha\":0.3,\"outline_line_color\":\"navy\",\"outline_line_width\":7,\"renderers\":[{\"id\":\"1038\"}],\"title\":{\"id\":\"1040\"},\"toolbar\":{\"id\":\"1027\"},\"width\":400,\"x_range\":{\"id\":\"1004\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\":{\"id\":\"1006\"},\"y_scale\":{\"id\":\"1010\"}},\"id\":\"1003\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"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\":{\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1004\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"1049\"},\"selection_policy\":{\"id\":\"1048\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1048\",\"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\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1006\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1034\"}},\"id\":\"1039\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1040\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1013\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1035\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1008\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1010\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1046\"},\"group\":null,\"major_label_policy\":{\"id\":\"1047\"},\"ticker\":{\"id\":\"1013\"}},\"id\":\"1012\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1012\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1036\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1043\"},\"group\":null,\"major_label_policy\":{\"id\":\"1044\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1037\",\"type\":\"Circle\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
496
+ " const render_items = [{\"docid\":\"0d2d89a6-eb13-4b04-95cc-76154f9321a2\",\"root_ids\":[\"1003\"],\"roots\":{\"1003\":\"8a2f03ba-56ec-4ad1-94e1-6b0d2e6e8738\"}}];\n",
497
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
498
+ " }\n",
499
+ " if (root.Bokeh !== undefined) {\n",
500
+ " embed_document(root);\n",
501
+ " } else {\n",
502
+ " let attempts = 0;\n",
503
+ " const timer = setInterval(function(root) {\n",
504
+ " if (root.Bokeh !== undefined) {\n",
505
+ " clearInterval(timer);\n",
506
+ " embed_document(root);\n",
507
+ " } else {\n",
508
+ " attempts++;\n",
509
+ " if (attempts > 100) {\n",
510
+ " clearInterval(timer);\n",
511
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
512
+ " }\n",
513
+ " }\n",
514
+ " }, 10, root)\n",
515
+ " }\n",
516
+ "})(window);"
517
+ ],
518
+ "application/vnd.bokehjs_exec.v0+json": ""
519
+ },
520
+ "metadata": {
521
+ "application/vnd.bokehjs_exec.v0+json": {
522
+ "id": "1003"
523
+ }
524
+ },
525
+ "output_type": "display_data"
526
+ }
527
+ ],
528
+ "source": [
529
+ "# create a new plot with a title\n",
530
+ "p = figure(plot_width=400, plot_height=400)\n",
531
+ "p.outline_line_width = 7\n",
532
+ "p.outline_line_alpha = 0.3\n",
533
+ "p.outline_line_color = \"navy\"\n",
534
+ "\n",
535
+ "p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)\n",
536
+ "\n",
537
+ "show(p)"
538
+ ]
539
+ },
540
+ {
541
+ "cell_type": "code",
542
+ "execution_count": 5,
543
+ "metadata": {
544
+ "Collapsed": "false"
545
+ },
546
+ "outputs": [],
547
+ "source": [
548
+ "# EXERCISE Create a plot of your own and customize several plot-level properties\n"
549
+ ]
550
+ },
551
+ {
552
+ "cell_type": "markdown",
553
+ "metadata": {
554
+ "Collapsed": "false"
555
+ },
556
+ "source": [
557
+ "# Glyphs\n",
558
+ "\n",
559
+ "It's also possible to style the visual properties of glyphs (see the [Glyphs](https://docs.bokeh.org/en/latest/docs/user_guide/styling.html#glyphs) section of the styling guide for more information). When using `bokeh.plotting` this is often done when calling the glyph methods:\n",
560
+ "```python\n",
561
+ "p.circle(line_color=\"red\", fill_alpha=0.2, ...)\n",
562
+ "```\n",
563
+ "But it is also possible to set these properties directly on glyph objects. Glyph objects are found on `GlyphRenderer` objects, which are returned by the `Plot.add_glyph` and `bokeh.plotting` glyph methods like `circle`, `rect`, etc. Let's look at an example:"
564
+ ]
565
+ },
566
+ {
567
+ "cell_type": "code",
568
+ "execution_count": 6,
569
+ "metadata": {
570
+ "Collapsed": "false"
571
+ },
572
+ "outputs": [
573
+ {
574
+ "data": {
575
+ "text/html": [
576
+ "\n",
577
+ " <div class=\"bk-root\" id=\"668cbe26-5d24-4331-81e6-82ad2cd16b3e\" data-root-id=\"1106\"></div>\n"
578
+ ]
579
+ },
580
+ "metadata": {},
581
+ "output_type": "display_data"
582
+ },
583
+ {
584
+ "data": {
585
+ "application/javascript": [
586
+ "(function(root) {\n",
587
+ " function embed_document(root) {\n",
588
+ " const docs_json = {\"62a1317c-c437-493f-aa14-8c11f13ba839\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1115\"}],\"center\":[{\"id\":\"1118\"},{\"id\":\"1122\"}],\"height\":400,\"left\":[{\"id\":\"1119\"}],\"renderers\":[{\"id\":\"1141\"}],\"title\":{\"id\":\"1154\"},\"toolbar\":{\"id\":\"1130\"},\"width\":400,\"x_range\":{\"id\":\"1107\"},\"x_scale\":{\"id\":\"1111\"},\"y_range\":{\"id\":\"1109\"},\"y_scale\":{\"id\":\"1113\"}},\"id\":\"1106\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1111\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1127\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1160\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1162\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1113\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1154\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1128\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1160\"},\"group\":null,\"major_label_policy\":{\"id\":\"1161\"},\"ticker\":{\"id\":\"1116\"}},\"id\":\"1115\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1157\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1158\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1161\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1115\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1118\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1120\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1157\"},\"group\":null,\"major_label_policy\":{\"id\":\"1158\"},\"ticker\":{\"id\":\"1120\"}},\"id\":\"1119\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"1163\"},\"selection_policy\":{\"id\":\"1162\"}},\"id\":\"1137\",\"type\":\"ColumnDataSource\"},{\"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\":\"1129\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1119\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1122\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1139\",\"type\":\"Circle\"},{\"attributes\":{\"tools\":[{\"id\":\"1123\"},{\"id\":\"1124\"},{\"id\":\"1125\"},{\"id\":\"1126\"},{\"id\":\"1127\"},{\"id\":\"1128\"}]},\"id\":\"1130\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"firebrick\"},\"line_dash\":{\"value\":[5,1]},\"line_width\":{\"value\":2},\"size\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1138\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1137\"},\"glyph\":{\"id\":\"1138\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1140\"},\"nonselection_glyph\":{\"id\":\"1139\"},\"view\":{\"id\":\"1142\"}},\"id\":\"1141\",\"type\":\"GlyphRenderer\"},{\"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\":\"1140\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1109\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1123\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1107\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1163\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1124\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1137\"}},\"id\":\"1142\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1129\"}},\"id\":\"1125\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1126\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1116\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"1106\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
589
+ " const render_items = [{\"docid\":\"62a1317c-c437-493f-aa14-8c11f13ba839\",\"root_ids\":[\"1106\"],\"roots\":{\"1106\":\"668cbe26-5d24-4331-81e6-82ad2cd16b3e\"}}];\n",
590
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
591
+ " }\n",
592
+ " if (root.Bokeh !== undefined) {\n",
593
+ " embed_document(root);\n",
594
+ " } else {\n",
595
+ " let attempts = 0;\n",
596
+ " const timer = setInterval(function(root) {\n",
597
+ " if (root.Bokeh !== undefined) {\n",
598
+ " clearInterval(timer);\n",
599
+ " embed_document(root);\n",
600
+ " } else {\n",
601
+ " attempts++;\n",
602
+ " if (attempts > 100) {\n",
603
+ " clearInterval(timer);\n",
604
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
605
+ " }\n",
606
+ " }\n",
607
+ " }, 10, root)\n",
608
+ " }\n",
609
+ "})(window);"
610
+ ],
611
+ "application/vnd.bokehjs_exec.v0+json": ""
612
+ },
613
+ "metadata": {
614
+ "application/vnd.bokehjs_exec.v0+json": {
615
+ "id": "1106"
616
+ }
617
+ },
618
+ "output_type": "display_data"
619
+ }
620
+ ],
621
+ "source": [
622
+ "p = figure(plot_width=400, plot_height=400)\n",
623
+ "\n",
624
+ "# keep a reference to the returned GlyphRenderer\n",
625
+ "r = p.circle([1,2,3,4,5], [2,5,8,2,7])\n",
626
+ "\n",
627
+ "r.glyph.size = 50\n",
628
+ "r.glyph.fill_alpha = 0.2\n",
629
+ "r.glyph.line_color = \"firebrick\"\n",
630
+ "r.glyph.line_dash = [5, 1]\n",
631
+ "r.glyph.line_width = 2\n",
632
+ "\n",
633
+ "show(p)"
634
+ ]
635
+ },
636
+ {
637
+ "cell_type": "markdown",
638
+ "metadata": {
639
+ "Collapsed": "false"
640
+ },
641
+ "source": [
642
+ "### Selection and non-selection visuals\n",
643
+ "\n",
644
+ "You can also control how glyphs look when there are selections involved. The set of \"selected\" points is displayed according to the optional `.selection_glyph` property of a `GlyphRenderer`:\n",
645
+ "```python\n",
646
+ "r.selection_glyph = Circle(fill_alpha=1, fill_color=\"firebrick\", line_color=None) \n",
647
+ "```\n",
648
+ "When there is a non-empty selection, the set of \"unselected\" points is displayed according to the optional `.nonselection_glyph` property of a `GlyphRenderer`:\n",
649
+ "```python\n",
650
+ "r.nonselection_glyph = Circle(fill_alpha=0.2, fill_color=\"grey\", line_color=None) \n",
651
+ "```\n",
652
+ "\n",
653
+ "When using the `bokeh.plotting` interface, it is easier to pass these visual properties to the glyph methods as shown below. The glyph method will create the selection or nonselection glyphs and attach them to the renderer for you. "
654
+ ]
655
+ },
656
+ {
657
+ "cell_type": "code",
658
+ "execution_count": 7,
659
+ "metadata": {
660
+ "Collapsed": "false"
661
+ },
662
+ "outputs": [
663
+ {
664
+ "data": {
665
+ "text/html": [
666
+ "\n",
667
+ " <div class=\"bk-root\" id=\"35ce84ed-2de2-4077-97f8-4cdf78dded66\" data-root-id=\"1220\"></div>\n"
668
+ ]
669
+ },
670
+ "metadata": {},
671
+ "output_type": "display_data"
672
+ },
673
+ {
674
+ "data": {
675
+ "application/javascript": [
676
+ "(function(root) {\n",
677
+ " function embed_document(root) {\n",
678
+ " const docs_json = {\"399891a7-334c-45c1-95b8-75a3d2d12c67\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1231\"}],\"center\":[{\"id\":\"1234\"},{\"id\":\"1238\"}],\"height\":400,\"left\":[{\"id\":\"1235\"}],\"renderers\":[{\"id\":\"1247\"}],\"title\":{\"id\":\"1221\"},\"toolbar\":{\"id\":\"1240\"},\"width\":400,\"x_range\":{\"id\":\"1223\"},\"x_scale\":{\"id\":\"1227\"},\"y_range\":{\"id\":\"1225\"},\"y_scale\":{\"id\":\"1229\"}},\"id\":\"1220\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1232\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1227\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"firebrick\"},\"hatch_color\":{\"value\":\"firebrick\"},\"line_color\":{\"value\":\"firebrick\"},\"size\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1245\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1229\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1242\"},\"glyph\":{\"id\":\"1243\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1246\"},\"nonselection_glyph\":{\"id\":\"1244\"},\"selection_glyph\":{\"id\":\"1245\"},\"view\":{\"id\":\"1248\"}},\"id\":\"1247\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1243\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1276\"},\"group\":null,\"major_label_policy\":{\"id\":\"1277\"},\"ticker\":{\"id\":\"1232\"}},\"id\":\"1231\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1231\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1234\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"grey\"},\"hatch_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"firebrick\"},\"size\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1244\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1236\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1273\"},\"group\":null,\"major_label_policy\":{\"id\":\"1274\"},\"ticker\":{\"id\":\"1236\"}},\"id\":\"1235\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":50},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1246\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1277\",\"type\":\"AllLabels\"},{\"attributes\":{\"source\":{\"id\":\"1242\"}},\"id\":\"1248\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1235\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1238\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null},\"id\":\"1239\",\"type\":\"TapTool\"},{\"attributes\":{},\"id\":\"1278\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1279\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1273\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1223\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1276\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Select a circle\"},\"id\":\"1221\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1225\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1274\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1239\"}]},\"id\":\"1240\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"1279\"},\"selection_policy\":{\"id\":\"1278\"}},\"id\":\"1242\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"1220\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
679
+ " const render_items = [{\"docid\":\"399891a7-334c-45c1-95b8-75a3d2d12c67\",\"root_ids\":[\"1220\"],\"roots\":{\"1220\":\"35ce84ed-2de2-4077-97f8-4cdf78dded66\"}}];\n",
680
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
681
+ " }\n",
682
+ " if (root.Bokeh !== undefined) {\n",
683
+ " embed_document(root);\n",
684
+ " } else {\n",
685
+ " let attempts = 0;\n",
686
+ " const timer = setInterval(function(root) {\n",
687
+ " if (root.Bokeh !== undefined) {\n",
688
+ " clearInterval(timer);\n",
689
+ " embed_document(root);\n",
690
+ " } else {\n",
691
+ " attempts++;\n",
692
+ " if (attempts > 100) {\n",
693
+ " clearInterval(timer);\n",
694
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
695
+ " }\n",
696
+ " }\n",
697
+ " }, 10, root)\n",
698
+ " }\n",
699
+ "})(window);"
700
+ ],
701
+ "application/vnd.bokehjs_exec.v0+json": ""
702
+ },
703
+ "metadata": {
704
+ "application/vnd.bokehjs_exec.v0+json": {
705
+ "id": "1220"
706
+ }
707
+ },
708
+ "output_type": "display_data"
709
+ }
710
+ ],
711
+ "source": [
712
+ "p = figure(plot_width=400, plot_height=400, tools=\"tap\", title=\"Select a circle\")\n",
713
+ "renderer = p.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=50,\n",
714
+ "\n",
715
+ " # set visual properties for selected glyphs\n",
716
+ " selection_color=\"firebrick\",\n",
717
+ "\n",
718
+ " # set visual properties for non-selected glyphs\n",
719
+ " nonselection_fill_alpha=0.2,\n",
720
+ " nonselection_fill_color=\"grey\",\n",
721
+ " nonselection_line_color=\"firebrick\",\n",
722
+ " nonselection_line_alpha=1.0)\n",
723
+ "\n",
724
+ "show(p)"
725
+ ]
726
+ },
727
+ {
728
+ "cell_type": "markdown",
729
+ "metadata": {
730
+ "Collapsed": "false"
731
+ },
732
+ "source": [
733
+ "It is also possible to specify the visual appearance of glyphs when they are \"inspected\", e.g. by a hover tool. This is accomplished by setting an optional `hover_glyph` on the glyph renderer:\n",
734
+ "```python\n",
735
+ "r.hover_glyph = Circle(fill_alpha=1, fill_color=\"firebrick\", line_color=None) \n",
736
+ "```\n",
737
+ "Or if using `bokeh.plotting` glyph methods, by passing `hover_fill_alpha`, etc. to the glyph method. Lets look at an example that works together with a `HoverTool` configured for \"hline\" hit-testing."
738
+ ]
739
+ },
740
+ {
741
+ "cell_type": "code",
742
+ "execution_count": 8,
743
+ "metadata": {
744
+ "Collapsed": "false"
745
+ },
746
+ "outputs": [
747
+ {
748
+ "data": {
749
+ "text/html": [
750
+ "\n",
751
+ " <div class=\"bk-root\" id=\"f1f0243e-1846-4de7-9bb5-e39ae31ff06f\" data-root-id=\"1325\"></div>\n"
752
+ ]
753
+ },
754
+ "metadata": {},
755
+ "output_type": "display_data"
756
+ },
757
+ {
758
+ "data": {
759
+ "application/javascript": [
760
+ "(function(root) {\n",
761
+ " function embed_document(root) {\n",
762
+ " const docs_json = {\"09aa481d-f46c-4d2c-9e3d-a558d706c391\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1336\"}],\"center\":[{\"id\":\"1339\"},{\"id\":\"1343\"}],\"height\":300,\"left\":[{\"id\":\"1340\"}],\"renderers\":[{\"id\":\"1362\"},{\"id\":\"1369\"}],\"title\":{\"id\":\"1326\"},\"toolbar\":{\"id\":\"1351\"},\"x_range\":{\"id\":\"1328\"},\"x_scale\":{\"id\":\"1332\"},\"y_range\":{\"id\":\"1330\"},\"y_scale\":{\"id\":\"1334\"}},\"id\":\"1325\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1349\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1364\"},\"glyph\":{\"id\":\"1365\"},\"group\":null,\"hover_glyph\":{\"id\":\"1367\"},\"muted_glyph\":{\"id\":\"1368\"},\"nonselection_glyph\":{\"id\":\"1366\"},\"view\":{\"id\":\"1370\"}},\"id\":\"1369\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"days\":[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]},\"id\":\"1419\",\"type\":\"DaysTicker\"},{\"attributes\":{\"days\":[1,4,7,10,13,16,19,22,25,28]},\"id\":\"1420\",\"type\":\"DaysTicker\"},{\"attributes\":{\"tools\":[{\"id\":\"1344\"},{\"id\":\"1345\"},{\"id\":\"1346\"},{\"id\":\"1347\"},{\"id\":\"1348\"},{\"id\":\"1349\"},{\"id\":\"1371\"}]},\"id\":\"1351\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"grey\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":null},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1368\",\"type\":\"Circle\"},{\"attributes\":{\"months\":[0,1,2,3,4,5,6,7,8,9,10,11]},\"id\":\"1423\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1336\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1339\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.3},\"fill_color\":{\"value\":\"firebrick\"},\"hatch_alpha\":{\"value\":0.3},\"line_alpha\":{\"value\":0.3},\"line_color\":{\"value\":\"white\"},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1367\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1341\",\"type\":\"BasicTicker\"},{\"attributes\":{\"days\":[1,8,15,22]},\"id\":\"1421\",\"type\":\"DaysTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1406\"},\"group\":null,\"major_label_policy\":{\"id\":\"1407\"},\"ticker\":{\"id\":\"1341\"}},\"id\":\"1340\",\"type\":\"LinearAxis\"},{\"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\":\"1350\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"days\":[1,15]},\"id\":\"1422\",\"type\":\"DaysTicker\"},{\"attributes\":{},\"id\":\"1407\",\"type\":\"AllLabels\"},{\"attributes\":{\"num_minor_ticks\":5,\"tickers\":[{\"id\":\"1416\"},{\"id\":\"1417\"},{\"id\":\"1418\"},{\"id\":\"1419\"},{\"id\":\"1420\"},{\"id\":\"1421\"},{\"id\":\"1422\"},{\"id\":\"1423\"},{\"id\":\"1424\"},{\"id\":\"1425\"},{\"id\":\"1426\"},{\"id\":\"1427\"}]},\"id\":\"1337\",\"type\":\"DatetimeTicker\"},{\"attributes\":{},\"id\":\"1410\",\"type\":\"AllLabels\"},{\"attributes\":{\"months\":[0,2,4,6,8,10]},\"id\":\"1424\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AADyke23ckIAADDb7bdyQgAAbiTut3JCAACsbe63ckIAAOq27rdyQgAAKADvt3JCAABmSe+3ckIAAKSS77dyQgAA4tvvt3JCAAAgJfC3ckIAAF5u8LdyQgAAnLfwt3JCAADaAPG3ckIAABhK8bdyQgAAVpPxt3JCAACU3PG3ckIAANIl8rdyQgAAEG/yt3JCAABOuPK3ckIAAIwB87dyQgAAykrzt3JCAAAIlPO3ckIAAEbd87dyQgAAhCb0t3JCAADCb/S3ckIAAAC59LdyQgAAPgL1t3JCAAB8S/W3ckIAALqU9bdyQgAA+N31t3JCAAA2J/a3ckIAAHRw9rdyQgAAsrn2t3JCAADwAve3ckIAAC5M97dyQgAAbJX3t3JCAACq3ve3ckIAAOgn+LdyQgAAJnH4t3JCAABkuvi3ckIAAKID+bdyQgAA4Ez5t3JCAAAelvm3ckIAAFzf+bdyQgAAmij6t3JCAADYcfq3ckIAABa7+rdyQgAAVAT7t3JCAACSTfu3ckIAANCW+7dyQgAADuD7t3JCAABMKfy3ckIAAIpy/LdyQgAAyLv8t3JCAAAGBf23ckIAAERO/bdyQgAAgpf9t3JCAADA4P23ckIAAP4p/rdyQgAAPHP+t3JCAAB6vP63ckIAALgF/7dyQgAA9k7/t3JCAAA0mP+3ckIAAHLh/7dyQgAAsCoAuHJCAADucwC4ckIAACy9ALhyQgAAagYBuHJCAACoTwG4ckIAAOaYAbhyQgAAJOIBuHJCAABiKwK4ckIAAKB0ArhyQgAA3r0CuHJCAAAcBwO4ckIAAFpQA7hyQgAAmJkDuHJCAADW4gO4ckIAABQsBLhyQgAAUnUEuHJCAACQvgS4ckIAAM4HBbhyQgAADFEFuHJCAABKmgW4ckIAAIjjBbhyQgAAxiwGuHJCAAAEdga4ckIAAEK/BrhyQgAAgAgHuHJCAAC+UQe4ckIAAPyaB7hyQgAAOuQHuHJCAAB4LQi4ckIAALZ2CLhyQgAA9L8IuHJCAAAyCQm4ckIAAHBSCbhyQgAArpsJuHJCAADs5Am4ckIAACouCrhyQgAAaHcKuHJCAACmwAq4ckIAAOQJC7hyQgAAIlMLuHJCAABgnAu4ckIAAJ7lC7hyQgAA3C4MuHJCAAAaeAy4ckIAAFjBDLhyQgAAlgoNuHJCAADUUw24ckIAABKdDbhyQgAAUOYNuHJCAACOLw64ckIAAMx4DrhyQgAACsIOuHJCAABICw+4ckIAAIZUD7hyQgAAxJ0PuHJCAAAC5w+4ckIAAEAwELhyQgAAfnkQuHJCAAC8whC4ckIAAPoLEbhyQgAAOFURuHJCAAB2nhG4ckIAALTnEbhyQgAA8jASuHJCAAAwehK4ckIAAG7DErhyQgAArAwTuHJCAADqVRO4ckIAACifE7hyQgAAZugTuHJCAACkMRS4ckIAAOJ6FLhyQgAAIMQUuHJCAABeDRW4ckIAAJxWFbhyQgAA2p8VuHJCAAAY6RW4ckIAAFYyFrhyQgAAlHsWuHJCAADSxBa4ckIAABAOF7hyQgAATlcXuHJCAACMoBe4ckIAAMrpF7hyQgAACDMYuHJCAABGfBi4ckIAAITFGLhyQgAAwg4ZuHJCAAAAWBm4ckIAAD6hGbhyQgAAfOoZuHJCAAC6Mxq4ckIAAPh8GrhyQgAANsYauHJCAAB0Dxu4ckIAALJYG7hyQgAA8KEbuHJCAAAu6xu4ckIAAGw0HLhyQgAAqn0cuHJCAADoxhy4ckIAACYQHbhyQgAAZFkduHJCAACioh24ckIAAODrHbhyQgAAHjUeuHJCAABcfh64ckIAAJrHHrhyQgAA2BAfuHJCAAAWWh+4ckIAAFSjH7hyQgAAkuwfuHJCAADQNSC4ckIAAA5/ILhyQgAATMgguHJCAACKESG4ckIAAMhaIbhyQgAABqQhuHJCAABE7SG4ckIAAII2IrhyQgAAwH8iuHJCAAD+yCK4ckIAADwSI7hyQgAAelsjuHJCAAC4pCO4ckIAAPbtI7hyQgAANDckuHJCAABygCS4ckIAALDJJLhyQgAA7hIluHJCAAAsXCW4ckIAAGqlJbhyQgAAqO4luHJCAADmNya4ckIAACSBJrhyQgAAYsomuHJCAACgEye4ckIAAN5cJ7hyQgAAHKYnuHJCAABa7ye4ckIAAJg4KLhyQgAA1oEouHJCAAAUyyi4ckIAAFIUKbhyQgAAkF0puHJCAADOpim4ckIAAAzwKbhyQgAASjkquHJCAACIgiq4ckIAAMbLKrhyQgAABBUruHJCAABCXiu4ckIAAICnK7hyQgAAvvAruHJCAAD8OSy4ckIAADqDLLhyQgAAeMwsuHJCAAC2FS24ckIAAPReLbhyQgAAMqgtuHJCAABw8S24ckIAAK46LrhyQgAA7IMuuHJCAAAqzS64ckIAAGgWL7hyQgAApl8vuHJCAADkqC+4ckIAACLyL7hyQgAAYDswuHJCAACehDC4ckIAANzNMLhyQgAAGhcxuHJCAABYYDG4ckIAAJapMbhyQgAA1PIxuHJCAAASPDK4ckIAAFCFMrhyQgAAjs4yuHJCAADMFzO4ckIAAAphM7hyQgAASKozuHJCAACG8zO4ckIAAMQ8NLhyQgAAAoY0uHJCAABAzzS4ckIAAH4YNbhyQgAAvGE1uHJCAAD6qjW4ckIAADj0NbhyQgAAdj02uHJCAAC0hja4ckIAAPLPNrhyQgAAMBk3uHJCAABuYje4ckIAAKyrN7hyQgAA6vQ3uHJCAAAoPji4ckIAAGaHOLhyQgAApNA4uHJCAADiGTm4ckIAACBjObhyQgAAXqw5uHJCAACc9Tm4ckIAANo+OrhyQgAAGIg6uHJCAABW0Tq4ckIAAJQaO7hyQgAA0mM7uHJCAAAQrTu4ckIAAE72O7hyQgAAjD88uHJCAADKiDy4ckIAAAjSPLhyQgAARhs9uHJCAACEZD24ckIAAMKtPbhyQgAAAPc9uHJCAAA+QD64ckIAAHyJPrhyQgAAutI+uHJCAAD4Gz+4ckIAADZlP7hyQgAAdK4/uHJC\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[288]},\"y\":[143,147,150,152,152,152,154,155,142,140,138,134,131,130,128,127,126,126,126,126,127,129,131,132,134,136,136,136,136,135,134,132,130,130,130,129,128,127,125,124,123,123,122,121,120,118,115,112,111,111,110,110,109,108,107,107,107,108,107,105,105,105,105,104,103,102,99,97,96,94,94,93,93,92,91,92,94,95,96,97,99,102,104,112,112,112,111,110,107,104,105,105,103,99,96,94,95,102,114,128,144,160,173,185,196,205,209,214,219,226,234,241,248,255,260,265,268,270,272,271,271,268,265,261,256,253,250,246,244,241,237,233,229,225,222,204,200,197,193,190,186,182,179,175,171,168,164,158,154,151,148,145,141,133,139,152,173,196,217,233,244,249,250,253,256,260,263,265,265,264,260,254,246,234,217,200,188,181,175,169,164,159,154,147,138,132,129,127,123,117,111,106,104,103,100,94,88,83,78,75,73,71,69,68,67,67,68,70,71,71,70,69,68,67,67,67,66,67,69,71,74,76,78,80,80,80,80,80,80,82,84,87,90,92,87,87,86,86,86,86,87,87,87,85,83,82,83,87,95,107,118,130,141,149,172,179,187,201,214,221,225,230,232,230,223,216,208,199,191,185,181,177,176,177,176,173,171,169,163,154,152,153,154,154,153,151,150,150]},\"selected\":{\"id\":\"1414\"},\"selection_policy\":{\"id\":\"1413\"}},\"id\":\"1364\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1409\",\"type\":\"DatetimeTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1340\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1343\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1358\"},\"glyph\":{\"id\":\"1359\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1361\"},\"nonselection_glyph\":{\"id\":\"1360\"},\"view\":{\"id\":\"1363\"}},\"id\":\"1362\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"grey\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":null},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1366\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1358\"}},\"id\":\"1363\",\"type\":\"CDSView\"},{\"attributes\":{\"months\":[0,4,8]},\"id\":\"1425\",\"type\":\"MonthsTicker\"},{\"attributes\":{},\"id\":\"1412\",\"type\":\"Selection\"},{\"attributes\":{\"base\":24,\"mantissas\":[1,2,4,6,8,12],\"max_interval\":43200000.0,\"min_interval\":3600000.0,\"num_minor_ticks\":0},\"id\":\"1418\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"gray\",\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1360\",\"type\":\"Line\"},{\"attributes\":{\"base\":60,\"mantissas\":[1,2,5,10,15,20,30],\"max_interval\":1800000.0,\"min_interval\":1000.0,\"num_minor_ticks\":0},\"id\":\"1417\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"months\":[0,6]},\"id\":\"1426\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"line_color\":\"gray\",\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1359\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"gray\",\"line_dash\":[4,4],\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1328\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AADyke23ckIAADDb7bdyQgAAbiTut3JCAACsbe63ckIAAOq27rdyQgAAKADvt3JCAABmSe+3ckIAAKSS77dyQgAA4tvvt3JCAAAgJfC3ckIAAF5u8LdyQgAAnLfwt3JCAADaAPG3ckIAABhK8bdyQgAAVpPxt3JCAACU3PG3ckIAANIl8rdyQgAAEG/yt3JCAABOuPK3ckIAAIwB87dyQgAAykrzt3JCAAAIlPO3ckIAAEbd87dyQgAAhCb0t3JCAADCb/S3ckIAAAC59LdyQgAAPgL1t3JCAAB8S/W3ckIAALqU9bdyQgAA+N31t3JCAAA2J/a3ckIAAHRw9rdyQgAAsrn2t3JCAADwAve3ckIAAC5M97dyQgAAbJX3t3JCAACq3ve3ckIAAOgn+LdyQgAAJnH4t3JCAABkuvi3ckIAAKID+bdyQgAA4Ez5t3JCAAAelvm3ckIAAFzf+bdyQgAAmij6t3JCAADYcfq3ckIAABa7+rdyQgAAVAT7t3JCAACSTfu3ckIAANCW+7dyQgAADuD7t3JCAABMKfy3ckIAAIpy/LdyQgAAyLv8t3JCAAAGBf23ckIAAERO/bdyQgAAgpf9t3JCAADA4P23ckIAAP4p/rdyQgAAPHP+t3JCAAB6vP63ckIAALgF/7dyQgAA9k7/t3JCAAA0mP+3ckIAAHLh/7dyQgAAsCoAuHJCAADucwC4ckIAACy9ALhyQgAAagYBuHJCAACoTwG4ckIAAOaYAbhyQgAAJOIBuHJCAABiKwK4ckIAAKB0ArhyQgAA3r0CuHJCAAAcBwO4ckIAAFpQA7hyQgAAmJkDuHJCAADW4gO4ckIAABQsBLhyQgAAUnUEuHJCAACQvgS4ckIAAM4HBbhyQgAADFEFuHJCAABKmgW4ckIAAIjjBbhyQgAAxiwGuHJCAAAEdga4ckIAAEK/BrhyQgAAgAgHuHJCAAC+UQe4ckIAAPyaB7hyQgAAOuQHuHJCAAB4LQi4ckIAALZ2CLhyQgAA9L8IuHJCAAAyCQm4ckIAAHBSCbhyQgAArpsJuHJCAADs5Am4ckIAACouCrhyQgAAaHcKuHJCAACmwAq4ckIAAOQJC7hyQgAAIlMLuHJCAABgnAu4ckIAAJ7lC7hyQgAA3C4MuHJCAAAaeAy4ckIAAFjBDLhyQgAAlgoNuHJCAADUUw24ckIAABKdDbhyQgAAUOYNuHJCAACOLw64ckIAAMx4DrhyQgAACsIOuHJCAABICw+4ckIAAIZUD7hyQgAAxJ0PuHJCAAAC5w+4ckIAAEAwELhyQgAAfnkQuHJCAAC8whC4ckIAAPoLEbhyQgAAOFURuHJCAAB2nhG4ckIAALTnEbhyQgAA8jASuHJCAAAwehK4ckIAAG7DErhyQgAArAwTuHJCAADqVRO4ckIAACifE7hyQgAAZugTuHJCAACkMRS4ckIAAOJ6FLhyQgAAIMQUuHJCAABeDRW4ckIAAJxWFbhyQgAA2p8VuHJCAAAY6RW4ckIAAFYyFrhyQgAAlHsWuHJCAADSxBa4ckIAABAOF7hyQgAATlcXuHJCAACMoBe4ckIAAMrpF7hyQgAACDMYuHJCAABGfBi4ckIAAITFGLhyQgAAwg4ZuHJCAAAAWBm4ckIAAD6hGbhyQgAAfOoZuHJCAAC6Mxq4ckIAAPh8GrhyQgAANsYauHJCAAB0Dxu4ckIAALJYG7hyQgAA8KEbuHJCAAAu6xu4ckIAAGw0HLhyQgAAqn0cuHJCAADoxhy4ckIAACYQHbhyQgAAZFkduHJCAACioh24ckIAAODrHbhyQgAAHjUeuHJCAABcfh64ckIAAJrHHrhyQgAA2BAfuHJCAAAWWh+4ckIAAFSjH7hyQgAAkuwfuHJCAADQNSC4ckIAAA5/ILhyQgAATMgguHJCAACKESG4ckIAAMhaIbhyQgAABqQhuHJCAABE7SG4ckIAAII2IrhyQgAAwH8iuHJCAAD+yCK4ckIAADwSI7hyQgAAelsjuHJCAAC4pCO4ckIAAPbtI7hyQgAANDckuHJCAABygCS4ckIAALDJJLhyQgAA7hIluHJCAAAsXCW4ckIAAGqlJbhyQgAAqO4luHJCAADmNya4ckIAACSBJrhyQgAAYsomuHJCAACgEye4ckIAAN5cJ7hyQgAAHKYnuHJCAABa7ye4ckIAAJg4KLhyQgAA1oEouHJCAAAUyyi4ckIAAFIUKbhyQgAAkF0puHJCAADOpim4ckIAAAzwKbhyQgAASjkquHJCAACIgiq4ckIAAMbLKrhyQgAABBUruHJCAABCXiu4ckIAAICnK7hyQgAAvvAruHJCAAD8OSy4ckIAADqDLLhyQgAAeMwsuHJCAAC2FS24ckIAAPReLbhyQgAAMqgtuHJCAABw8S24ckIAAK46LrhyQgAA7IMuuHJCAAAqzS64ckIAAGgWL7hyQgAApl8vuHJCAADkqC+4ckIAACLyL7hyQgAAYDswuHJCAACehDC4ckIAANzNMLhyQgAAGhcxuHJCAABYYDG4ckIAAJapMbhyQgAA1PIxuHJCAAASPDK4ckIAAFCFMrhyQgAAjs4yuHJCAADMFzO4ckIAAAphM7hyQgAASKozuHJCAACG8zO4ckIAAMQ8NLhyQgAAAoY0uHJCAABAzzS4ckIAAH4YNbhyQgAAvGE1uHJCAAD6qjW4ckIAADj0NbhyQgAAdj02uHJCAAC0hja4ckIAAPLPNrhyQgAAMBk3uHJCAABuYje4ckIAAKyrN7hyQgAA6vQ3uHJCAAAoPji4ckIAAGaHOLhyQgAApNA4uHJCAADiGTm4ckIAACBjObhyQgAAXqw5uHJCAACc9Tm4ckIAANo+OrhyQgAAGIg6uHJCAABW0Tq4ckIAAJQaO7hyQgAA0mM7uHJCAAAQrTu4ckIAAE72O7hyQgAAjD88uHJCAADKiDy4ckIAAAjSPLhyQgAARhs9uHJCAACEZD24ckIAAMKtPbhyQgAAAPc9uHJCAAA+QD64ckIAAHyJPrhyQgAAutI+uHJCAAD4Gz+4ckIAADZlP7hyQgAAdK4/uHJC\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[288]},\"y\":[143,147,150,152,152,152,154,155,142,140,138,134,131,130,128,127,126,126,126,126,127,129,131,132,134,136,136,136,136,135,134,132,130,130,130,129,128,127,125,124,123,123,122,121,120,118,115,112,111,111,110,110,109,108,107,107,107,108,107,105,105,105,105,104,103,102,99,97,96,94,94,93,93,92,91,92,94,95,96,97,99,102,104,112,112,112,111,110,107,104,105,105,103,99,96,94,95,102,114,128,144,160,173,185,196,205,209,214,219,226,234,241,248,255,260,265,268,270,272,271,271,268,265,261,256,253,250,246,244,241,237,233,229,225,222,204,200,197,193,190,186,182,179,175,171,168,164,158,154,151,148,145,141,133,139,152,173,196,217,233,244,249,250,253,256,260,263,265,265,264,260,254,246,234,217,200,188,181,175,169,164,159,154,147,138,132,129,127,123,117,111,106,104,103,100,94,88,83,78,75,73,71,69,68,67,67,68,70,71,71,70,69,68,67,67,67,66,67,69,71,74,76,78,80,80,80,80,80,80,82,84,87,90,92,87,87,86,86,86,86,87,87,87,85,83,82,83,87,95,107,118,130,141,149,172,179,187,201,214,221,225,230,232,230,223,216,208,199,191,185,181,177,176,177,176,173,171,169,163,154,152,153,154,154,153,151,150,150]},\"selected\":{\"id\":\"1412\"},\"selection_policy\":{\"id\":\"1411\"}},\"id\":\"1358\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1413\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Hover over points\"},\"id\":\"1326\",\"type\":\"Title\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1409\"},\"group\":null,\"major_label_policy\":{\"id\":\"1410\"},\"ticker\":{\"id\":\"1337\"}},\"id\":\"1336\",\"type\":\"DatetimeAxis\"},{\"attributes\":{},\"id\":\"1344\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1414\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"mode\":\"hline\",\"renderers\":[{\"id\":\"1369\"}],\"tooltips\":null},\"id\":\"1371\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"YearsTicker\"},{\"attributes\":{},\"id\":\"1345\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1330\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"1350\"}},\"id\":\"1346\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.05},\"fill_color\":{\"value\":\"grey\"},\"line_color\":{\"value\":null},\"size\":{\"value\":20},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1365\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1347\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1332\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1348\",\"type\":\"ResetTool\"},{\"attributes\":{\"mantissas\":[1,2,5],\"max_interval\":500.0,\"num_minor_ticks\":0},\"id\":\"1416\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"source\":{\"id\":\"1364\"}},\"id\":\"1370\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1406\",\"type\":\"BasicTickFormatter\"}],\"root_ids\":[\"1325\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
763
+ " const render_items = [{\"docid\":\"09aa481d-f46c-4d2c-9e3d-a558d706c391\",\"root_ids\":[\"1325\"],\"roots\":{\"1325\":\"f1f0243e-1846-4de7-9bb5-e39ae31ff06f\"}}];\n",
764
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
765
+ " }\n",
766
+ " if (root.Bokeh !== undefined) {\n",
767
+ " embed_document(root);\n",
768
+ " } else {\n",
769
+ " let attempts = 0;\n",
770
+ " const timer = setInterval(function(root) {\n",
771
+ " if (root.Bokeh !== undefined) {\n",
772
+ " clearInterval(timer);\n",
773
+ " embed_document(root);\n",
774
+ " } else {\n",
775
+ " attempts++;\n",
776
+ " if (attempts > 100) {\n",
777
+ " clearInterval(timer);\n",
778
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
779
+ " }\n",
780
+ " }\n",
781
+ " }, 10, root)\n",
782
+ " }\n",
783
+ "})(window);"
784
+ ],
785
+ "application/vnd.bokehjs_exec.v0+json": ""
786
+ },
787
+ "metadata": {
788
+ "application/vnd.bokehjs_exec.v0+json": {
789
+ "id": "1325"
790
+ }
791
+ },
792
+ "output_type": "display_data"
793
+ }
794
+ ],
795
+ "source": [
796
+ "from bokeh.models.tools import HoverTool\n",
797
+ "from bokeh.sampledata.glucose import data\n",
798
+ "\n",
799
+ "subset = data.loc['2010-10-06']\n",
800
+ "\n",
801
+ "x, y = subset.index.to_series(), subset['glucose']\n",
802
+ "\n",
803
+ "# Basic plot setup\n",
804
+ "p = figure(width=600, height=300, x_axis_type=\"datetime\", title='Hover over points')\n",
805
+ "\n",
806
+ "p.line(x, y, line_dash=\"4 4\", line_width=1, color='gray')\n",
807
+ "\n",
808
+ "cr = p.circle(x, y, size=20,\n",
809
+ " fill_color=\"grey\", hover_fill_color=\"firebrick\",\n",
810
+ " fill_alpha=0.05, hover_alpha=0.3,\n",
811
+ " line_color=None, hover_line_color=\"white\")\n",
812
+ "\n",
813
+ "p.add_tools(HoverTool(tooltips=None, renderers=[cr], mode='hline'))\n",
814
+ "\n",
815
+ "show(p)"
816
+ ]
817
+ },
818
+ {
819
+ "cell_type": "code",
820
+ "execution_count": 9,
821
+ "metadata": {
822
+ "Collapsed": "false"
823
+ },
824
+ "outputs": [],
825
+ "source": [
826
+ "# EXERCISE: experiment with standard, selected, hover glyph visual properties\n"
827
+ ]
828
+ },
829
+ {
830
+ "cell_type": "markdown",
831
+ "metadata": {
832
+ "Collapsed": "false"
833
+ },
834
+ "source": [
835
+ "# Axes\n",
836
+ "\n",
837
+ "Next we will take a look at [stlying of Axes](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#axes).\n",
838
+ "\n",
839
+ "To style axes, you first must get ahold of `Axis` objects. The simplest way is to use some convenience methods on `Plot`: `axis`, `xaxis`, and `yaxis`. These methods return lists of axis objects:\n",
840
+ "\n",
841
+ "```\n",
842
+ ">>> p.xaxis\n",
843
+ "[<bokeh.models.axes.LinearAxis at 0x106fa2390>]\n",
844
+ "```\n",
845
+ "However, you can set properties on all the elements of the list as if it was a single object:\n",
846
+ "```\n",
847
+ "p.xaxis.axis_label = \"Temperature\"\n",
848
+ "p.axis.major_label_text_color = \"orange\"\n",
849
+ "```\n",
850
+ "These are referred to as \"splattable\" lists, and tab completion works on them as well. \n"
851
+ ]
852
+ },
853
+ {
854
+ "cell_type": "code",
855
+ "execution_count": 10,
856
+ "metadata": {
857
+ "Collapsed": "false"
858
+ },
859
+ "outputs": [],
860
+ "source": [
861
+ "# EXERCISE Try out tab completion. Type p.xaxis.<press tab key> to see a list of attributes that can be set.\n",
862
+ "\n"
863
+ ]
864
+ },
865
+ {
866
+ "cell_type": "markdown",
867
+ "metadata": {
868
+ "Collapsed": "false"
869
+ },
870
+ "source": [
871
+ "## Axis properties\n",
872
+ "\n",
873
+ "Axes objects have many configurable properties that afford control over most visual aspects of an axis. These can be grouped by function according to prefix:\n",
874
+ "\n",
875
+ "* **axis** [line properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#line-properties) e.g `axis_line_width`\n",
876
+ "\n",
877
+ "* **axis_label** [text properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#text-properties) e.g. `axis_label_text_color`, as well as ``axis_label_standoff``\n",
878
+ "\n",
879
+ "* **major_label** [text properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#text-properties) e.g. `major_label_text_font_size`, as well as ``major_label_orientation``\n",
880
+ "\n",
881
+ "* **major_tick** [line_properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#line-properties) e.g. `major_tick_line_dash`, as well as ``major_tick_in`` and ``major_tick_out``\n",
882
+ "\n",
883
+ "* **minor_tick** [line properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#line-properties) e.g. `minor_tick_line_width`, as well as ``minor_tick_in`` and ``minor_tick_out``\n",
884
+ "\n",
885
+ "As a simple first case, let's change the orientation of the major tick labels on both axes of a plot:"
886
+ ]
887
+ },
888
+ {
889
+ "cell_type": "code",
890
+ "execution_count": 11,
891
+ "metadata": {
892
+ "Collapsed": "false"
893
+ },
894
+ "outputs": [
895
+ {
896
+ "data": {
897
+ "text/html": [
898
+ "\n",
899
+ " <div class=\"bk-root\" id=\"4f68ecb2-48e8-4f32-b0b1-395717d37316\" data-root-id=\"1548\"></div>\n"
900
+ ]
901
+ },
902
+ "metadata": {},
903
+ "output_type": "display_data"
904
+ },
905
+ {
906
+ "data": {
907
+ "application/javascript": [
908
+ "(function(root) {\n",
909
+ " function embed_document(root) {\n",
910
+ " const docs_json = {\"c7b90cc1-8464-4a8f-b08b-4a66d098c27b\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1557\"}],\"center\":[{\"id\":\"1560\"},{\"id\":\"1564\"}],\"height\":400,\"left\":[{\"id\":\"1561\"}],\"renderers\":[{\"id\":\"1583\"}],\"title\":{\"id\":\"1640\"},\"toolbar\":{\"id\":\"1572\"},\"width\":400,\"x_range\":{\"id\":\"1549\"},\"x_scale\":{\"id\":\"1553\"},\"y_range\":{\"id\":\"1551\"},\"y_scale\":{\"id\":\"1555\"}},\"id\":\"1548\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"1561\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1564\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1646\"},\"group\":null,\"major_label_orientation\":0.7853981633974483,\"major_label_policy\":{\"id\":\"1647\"},\"ticker\":{\"id\":\"1558\"}},\"id\":\"1557\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"line_width\":{\"value\":2},\"marker\":{\"value\":\"x\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1582\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1649\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1555\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1569\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1562\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1646\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1579\"},\"glyph\":{\"id\":\"1580\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1582\"},\"nonselection_glyph\":{\"id\":\"1581\"},\"view\":{\"id\":\"1584\"}},\"id\":\"1583\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"1557\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1560\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1579\"}},\"id\":\"1584\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"line_width\":{\"value\":2},\"marker\":{\"value\":\"x\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1581\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1553\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1565\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1643\"},\"group\":null,\"major_label_orientation\":\"vertical\",\"major_label_policy\":{\"id\":\"1644\"},\"ticker\":{\"id\":\"1562\"}},\"id\":\"1561\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1568\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1647\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1549\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1566\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1571\"}},\"id\":\"1567\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1648\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1570\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1643\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"1649\"},\"selection_policy\":{\"id\":\"1648\"}},\"id\":\"1579\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"tools\":[{\"id\":\"1565\"},{\"id\":\"1566\"},{\"id\":\"1567\"},{\"id\":\"1568\"},{\"id\":\"1569\"},{\"id\":\"1570\"}]},\"id\":\"1572\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"line_width\":{\"value\":2},\"marker\":{\"value\":\"x\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1580\",\"type\":\"Scatter\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1640\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1644\",\"type\":\"AllLabels\"},{\"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\":\"1571\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1551\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1558\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"1548\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
911
+ " const render_items = [{\"docid\":\"c7b90cc1-8464-4a8f-b08b-4a66d098c27b\",\"root_ids\":[\"1548\"],\"roots\":{\"1548\":\"4f68ecb2-48e8-4f32-b0b1-395717d37316\"}}];\n",
912
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
913
+ " }\n",
914
+ " if (root.Bokeh !== undefined) {\n",
915
+ " embed_document(root);\n",
916
+ " } else {\n",
917
+ " let attempts = 0;\n",
918
+ " const timer = setInterval(function(root) {\n",
919
+ " if (root.Bokeh !== undefined) {\n",
920
+ " clearInterval(timer);\n",
921
+ " embed_document(root);\n",
922
+ " } else {\n",
923
+ " attempts++;\n",
924
+ " if (attempts > 100) {\n",
925
+ " clearInterval(timer);\n",
926
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
927
+ " }\n",
928
+ " }\n",
929
+ " }, 10, root)\n",
930
+ " }\n",
931
+ "})(window);"
932
+ ],
933
+ "application/vnd.bokehjs_exec.v0+json": ""
934
+ },
935
+ "metadata": {
936
+ "application/vnd.bokehjs_exec.v0+json": {
937
+ "id": "1548"
938
+ }
939
+ },
940
+ "output_type": "display_data"
941
+ }
942
+ ],
943
+ "source": [
944
+ "from math import pi\n",
945
+ "\n",
946
+ "p = figure(plot_width=400, plot_height=400)\n",
947
+ "p.x([1,2,3,4,5], [2,5,8,2,7], size=10, line_width=2)\n",
948
+ "\n",
949
+ "p.xaxis.major_label_orientation = pi/4\n",
950
+ "p.yaxis.major_label_orientation = \"vertical\"\n",
951
+ "\n",
952
+ "show(p)"
953
+ ]
954
+ },
955
+ {
956
+ "cell_type": "markdown",
957
+ "metadata": {
958
+ "Collapsed": "false"
959
+ },
960
+ "source": [
961
+ "The next example shows customizations on several of the different Axis properties at once:"
962
+ ]
963
+ },
964
+ {
965
+ "cell_type": "code",
966
+ "execution_count": 12,
967
+ "metadata": {
968
+ "Collapsed": "false"
969
+ },
970
+ "outputs": [
971
+ {
972
+ "data": {
973
+ "text/html": [
974
+ "\n",
975
+ " <div class=\"bk-root\" id=\"f8aa1fe2-1750-4a37-8ff2-7f922df004ec\" data-root-id=\"1706\"></div>\n"
976
+ ]
977
+ },
978
+ "metadata": {},
979
+ "output_type": "display_data"
980
+ },
981
+ {
982
+ "data": {
983
+ "application/javascript": [
984
+ "(function(root) {\n",
985
+ " function embed_document(root) {\n",
986
+ " const docs_json = {\"581b3e50-dd88-4df8-8606-b2dd040ace54\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1715\"}],\"center\":[{\"id\":\"1718\"},{\"id\":\"1722\"}],\"height\":400,\"left\":[{\"id\":\"1719\"}],\"renderers\":[{\"id\":\"1741\"}],\"title\":{\"id\":\"1809\"},\"toolbar\":{\"id\":\"1730\"},\"width\":400,\"x_range\":{\"id\":\"1707\"},\"x_scale\":{\"id\":\"1711\"},\"y_range\":{\"id\":\"1709\"},\"y_scale\":{\"id\":\"1713\"}},\"id\":\"1706\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis_label\":\"Temp\",\"axis_line_color\":\"red\",\"axis_line_width\":3,\"coordinates\":null,\"formatter\":{\"id\":\"1815\"},\"group\":null,\"major_label_policy\":{\"id\":\"1816\"},\"minor_tick_in\":-3,\"minor_tick_out\":6,\"ticker\":{\"id\":\"1716\"}},\"id\":\"1715\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1815\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"tools\":[{\"id\":\"1723\"},{\"id\":\"1724\"},{\"id\":\"1725\"},{\"id\":\"1726\"},{\"id\":\"1727\"},{\"id\":\"1728\"}]},\"id\":\"1730\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1816\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1715\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1718\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1720\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1817\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Pressure\",\"coordinates\":null,\"formatter\":{\"id\":\"1812\"},\"group\":null,\"major_label_orientation\":\"vertical\",\"major_label_policy\":{\"id\":\"1813\"},\"major_label_text_color\":\"orange\",\"minor_tick_in\":-3,\"minor_tick_out\":6,\"ticker\":{\"id\":\"1720\"}},\"id\":\"1719\",\"type\":\"LinearAxis\"},{\"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\":\"1729\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1719\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1722\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"olive\"},\"hatch_color\":{\"value\":\"olive\"},\"line_color\":{\"value\":\"olive\"},\"marker\":{\"value\":\"asterisk\"},\"size\":{\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1738\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"olive\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"olive\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"olive\"},\"marker\":{\"value\":\"asterisk\"},\"size\":{\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1739\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"1818\"},\"selection_policy\":{\"id\":\"1817\"}},\"id\":\"1737\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1707\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"olive\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"olive\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"olive\"},\"marker\":{\"value\":\"asterisk\"},\"size\":{\"value\":12},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1740\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1709\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1723\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1818\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1809\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"1737\"}},\"id\":\"1742\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1727\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1812\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1724\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1737\"},\"glyph\":{\"id\":\"1738\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1740\"},\"nonselection_glyph\":{\"id\":\"1739\"},\"view\":{\"id\":\"1742\"}},\"id\":\"1741\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1729\"}},\"id\":\"1725\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1728\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1726\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1813\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1716\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1711\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1713\",\"type\":\"LinearScale\"}],\"root_ids\":[\"1706\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
987
+ " const render_items = [{\"docid\":\"581b3e50-dd88-4df8-8606-b2dd040ace54\",\"root_ids\":[\"1706\"],\"roots\":{\"1706\":\"f8aa1fe2-1750-4a37-8ff2-7f922df004ec\"}}];\n",
988
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
989
+ " }\n",
990
+ " if (root.Bokeh !== undefined) {\n",
991
+ " embed_document(root);\n",
992
+ " } else {\n",
993
+ " let attempts = 0;\n",
994
+ " const timer = setInterval(function(root) {\n",
995
+ " if (root.Bokeh !== undefined) {\n",
996
+ " clearInterval(timer);\n",
997
+ " embed_document(root);\n",
998
+ " } else {\n",
999
+ " attempts++;\n",
1000
+ " if (attempts > 100) {\n",
1001
+ " clearInterval(timer);\n",
1002
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
1003
+ " }\n",
1004
+ " }\n",
1005
+ " }, 10, root)\n",
1006
+ " }\n",
1007
+ "})(window);"
1008
+ ],
1009
+ "application/vnd.bokehjs_exec.v0+json": ""
1010
+ },
1011
+ "metadata": {
1012
+ "application/vnd.bokehjs_exec.v0+json": {
1013
+ "id": "1706"
1014
+ }
1015
+ },
1016
+ "output_type": "display_data"
1017
+ }
1018
+ ],
1019
+ "source": [
1020
+ "p = figure(plot_width=400, plot_height=400)\n",
1021
+ "p.asterisk([1,2,3,4,5], [2,5,8,2,7], size=12, color=\"olive\")\n",
1022
+ "\n",
1023
+ "# change just some things about the x-axes\n",
1024
+ "p.xaxis.axis_label = \"Temp\"\n",
1025
+ "p.xaxis.axis_line_width = 3\n",
1026
+ "p.xaxis.axis_line_color = \"red\"\n",
1027
+ "\n",
1028
+ "# change just some things about the y-axes\n",
1029
+ "p.yaxis.axis_label = \"Pressure\"\n",
1030
+ "p.yaxis.major_label_text_color = \"orange\"\n",
1031
+ "p.yaxis.major_label_orientation = \"vertical\"\n",
1032
+ "\n",
1033
+ "# change things on all axes\n",
1034
+ "p.axis.minor_tick_in = -3\n",
1035
+ "p.axis.minor_tick_out = 6\n",
1036
+ "\n",
1037
+ "show(p)"
1038
+ ]
1039
+ },
1040
+ {
1041
+ "cell_type": "code",
1042
+ "execution_count": 13,
1043
+ "metadata": {
1044
+ "Collapsed": "false"
1045
+ },
1046
+ "outputs": [],
1047
+ "source": [
1048
+ "# EXERCISE Create a plot of your own and customize several axis properties\n"
1049
+ ]
1050
+ },
1051
+ {
1052
+ "cell_type": "markdown",
1053
+ "metadata": {
1054
+ "Collapsed": "false"
1055
+ },
1056
+ "source": [
1057
+ "## Configuring tick labels\n",
1058
+ "\n",
1059
+ "All Bokeh axes have a `formatter` property, whose value is a `TickFormatter` object that Bokeh uses to format the ticks displayed by that axis. Bokeh will configure default tick formatters for numeric, datetime, or categotical axes. But often we would like to customize the appearance of tick labels. This can be accomplished by changing properties on the default formatter that Bokeh chooses, or by replacing the formatter with a new type entirely. \n",
1060
+ "\n",
1061
+ "Let's first look at changing the properties of a default formatter. The default datetime formatter is configured to show *month/day* when the axis is on the scale of days. If would like the also always show the year, we can change the `days` property to a format that includes the year, as done below. "
1062
+ ]
1063
+ },
1064
+ {
1065
+ "cell_type": "code",
1066
+ "execution_count": 14,
1067
+ "metadata": {
1068
+ "Collapsed": "false"
1069
+ },
1070
+ "outputs": [
1071
+ {
1072
+ "data": {
1073
+ "text/html": [
1074
+ "\n",
1075
+ " <div class=\"bk-root\" id=\"d719ddd1-c646-49d9-bc18-de1e61613b70\" data-root-id=\"1875\"></div>\n"
1076
+ ]
1077
+ },
1078
+ "metadata": {},
1079
+ "output_type": "display_data"
1080
+ },
1081
+ {
1082
+ "data": {
1083
+ "application/javascript": [
1084
+ "(function(root) {\n",
1085
+ " function embed_document(root) {\n",
1086
+ " const docs_json = {\"937af2f8-2e2e-4623-be45-efe8df25dc78\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1886\"}],\"center\":[{\"id\":\"1889\"},{\"id\":\"1893\"}],\"height\":350,\"left\":[{\"id\":\"1890\"}],\"renderers\":[{\"id\":\"1913\"}],\"title\":{\"id\":\"1876\"},\"toolbar\":{\"id\":\"1901\"},\"width\":800,\"x_range\":{\"id\":\"1878\"},\"x_scale\":{\"id\":\"1882\"},\"y_range\":{\"id\":\"1880\"},\"y_scale\":{\"id\":\"1884\"}},\"id\":\"1875\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1895\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1894\",\"type\":\"PanTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1900\"}},\"id\":\"1896\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"months\":[0,6]},\"id\":\"2012\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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AABK++C3ckIAAIhE4bdyQgAAxo3ht3JCAAAE1+G3ckIAAEIg4rdyQgAAgGnit3JCAAC+suK3ckIAAPz74rdyQgAAOkXjt3JCAAB4juO3ckIAALbX47dyQgAArvzkt3JCAADsReW3ckIAACqP5bdyQgAAaNjlt3JCAACmIea3ckIAAORq5rdyQgAAIrTmt3JCAABg/ea3ckIAAJ5G57dyQgAA3I/nt3JCAAAa2ee3ckIAAFgi6LdyQgAAlmvot3JCAADUtOi3ckIAABL+6LdyQgAAUEfpt3JCAACOkOm3ckIAAMzZ6bdyQgAACiPqt3JCAABIbOq3ckIAAIa16rdyQgAAxP7qt3JCAAACSOu3ckIAAECR67dyQgAAftrrt3JCAAC8I+y3ckIAAPps7LdyQgAAOLbst3JCAAB2/+y3ckIAALRI7bdyQgAA8pHtt3JCAAAw2+23ckIAAG4k7rdyQgAArG3ut3JCAADqtu63ckIAACgA77dyQgAAZknvt3JCAACkku+3ckIAAOLb77dyQgAAICXwt3JCAABebvC3ckIAAJy38LdyQgAA2gDxt3JCAAAYSvG3ckIAAFaT8bdyQgAAlNzxt3JCAADSJfK3ckIAABBv8rdyQgAATrjyt3JCAACMAfO3ckIAAMpK87dyQgAACJTzt3JCAABG3fO3ckIAAIQm9LdyQgAAwm/0t3JCAAAAufS3ckIAAD4C9bdyQgAAfEv1t3JCAAC6lPW3ckIAAPjd9bdyQgAANif2t3JCAAB0cPa3ckIAALK59rdyQgAA8AL3t3JCAAAuTPe3ckIAAGyV97dyQgAAqt73t3JCAADoJ/i3ckIAACZx+LdyQgAAZLr4t3JCAACiA/m3ckIAAOBM+bdyQgAAHpb5t3JCAABc3/m3ckIAAJoo+rdyQgAA2HH6t3JCAAAWu/q3ckIAAFQE+7dyQgAAkk37t3JCAADQlvu3ckIAAA7g+7dyQgAATCn8t3JCAACKcvy3ckIAAMi7/LdyQgAABgX9t3JCAABETv23ckIAAIKX/bdyQgAAwOD9t3JCAAD+Kf63ckIAADxz/rdyQgAAerz+t3JCAAC4Bf+3ckIAAPZO/7dyQgAANJj/t3JCAABy4f+3ckIAALAqALhyQgAA7nMAuHJCAAAsvQC4ckIAAGoGAbhyQgAAqE8BuHJCAADmmAG4ckIAACTi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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[2217]},\"y\":[92,100,108,115,120,124,128,133,137,142,147,152,157,162,167,171,175,179,185,192,200,207,212,215,217,219,218,219,217,216,216,216,215,214,212,211,209,207,204,203,203,203,203,204,203,202,201,200,199,199,197,193,189,185,182,182,183,184,184,182,177,174,172,170,168,167,166,164,162,160,158,155,152,150,147,140,131,124,120,116,114,114,116,118,119,120,120,120,119,117,114,112,112,111,111,112,111,111,110,108,106,106,106,106,104,101,101,103,102,100,99,100,100,99,99,99,100,99,98,97,97,96,92,90,89,86,85,85,84,84,81,80,81,86,99,115,125,130,129,128,123,118,113,111,112,111,109,108,105,101,100,102,107,113,119,125,129,131,129,128,127,127,127,125,122,117,113,108,103,98,93,89,86,85,83,82,81,82,84,87,92,99,107,121,133,142,146,149,150,151,151,152,152,150,148,161,160,158,157,157,157,156,153,149,147,145,144,145,149,154,159,163,164,164,164,163,162,158,154,153,154,155,157,159,158,156,152,148,144,139,134,128,123,121,119,117,115,115,112,109,106,105,103,101,97,93,89,86,85,88,93,100,106,113,119,125,131,137,142,149,159,172,186,197,204,207,208,207,205,202,199,197,193,185,176,178,177,177,176,173,171,170,169,167,166,165,163,163,162,160,156,150,150,150,151,150,150,150,149,149,148,149,147,145,143,139,141,145,147,147,146,145,141,138,136,135,134,133,132,129,124,120,118,112,114,119,123,125,126,127,128,135,143,148,151,153,154,155,156,156,157,157,156,155,154,147,137,131,128,129,131,132,133,135,135,133,131,132,135,138,139,138,136,132,128,126,125,120,113,108,106,105,108,111,113,116,120,120,120,119,118,118,118,118,117,116,113,106,98,93,97,107,115,122,120,113,102,94,95,96,90,88,83,83,85,90,97,98,99,94,89,95,105,111,113,106,95,90,91,96,101,104,109,112,120,123,118,115,123,130,128,130,136,131,121,113,110,108,109,111,115,120,115,108,105,105,104,106,110,111,115,115,117,114,111,107,105,109,111,110,111,115,121,126,135,142,145,147,150,153,156,160,162,161,160,160,159,157,154,152,152,150,143,138,132,128,124,119,112,105,98,92,94,98,106,118,126,128,127,123,123,121,118,115,112,112,114,113,105,78,209,204,214,252,282,290,295,292,284,268,263,262,263,263,262,258,249,236,179,165,157,152,150,149,150,154,158,163,166,166,163,159,158,161,170,176,178,174,170,166,160,156,151,148,147,145,142,141,145,144,144,153,155,152,147,143,145,152,156,157,156,155,155,156,158,158,158,156,152,146,139,139,141,143,145,147,148,149,149,149,148,147,144,140,139,139,138,137,136,135,134,133,134,136,137,136,134,135,139,142,143,141,138,141,145,148,151,152,154,156,155,155,159,163,166,166,166,164,162,160,158,157,155,153,150,150,149,149,149,149,150,152,154,155,155,156,156,157,160,163,165,165,164,163,121,119,117,114,113,112,113,113,113,113,112,113,113,113,114,112,110,109,109,109,108,108,90,90,94,99,107,116,125,130,132,130,124,117,110,103,95,88,81,77,75,63,65,70,73,78,80,80,79,80,83,86,89,94,96,98,104,105,106,106,107,107,109,114,118,121,123,124,123,122,122,123,123,123,124,123,123,124,127,132,137,139,140,140,142,147,152,156,160,165,168,169,169,165,162,160,158,156,154,150,146,144,141,138,136,133,129,124,118,112,107,106,107,108,109,110,111,112,112,113,114,115,116,117,118,119,122,125,128,130,130,131,130,128,126,123,120,116,93,89,86,84,82,79,76,74,72,71,69,70,68,67,66,67,68,69,69,69,68,68,67,66,65,64,63,61,61,60,60,61,63,64,64,64,63,64,65,66,67,67,66,66,67,68,69,71,73,72,71,70,71,72,74,75,76,78,79,80,81,82,84,86,88,88,87,86,85,86,86,86,86,87,87,88,88,88,89,87,83,79,78,82,85,87,88,89,89,89,87,86,88,89,90,89,90,92,91,90,89,88,87,87,89,90,91,92,94,108,110,110,111,111,111,112,113,114,116,116,116,117,119,121,124,127,131,138,145,150,155,161,165,169,173,177,182,185,185,184,189,193,195,198,198,197,196,196,199,202,202,201,202,204,205,205,203,202,201,197,197,198,199,200,199,195,190,184,180,178,179,180,179,176,175,174,172,169,168,167,170,180,191,203,214,219,219,222,227,228,226,223,221,219,219,218,218,219,218,216,214,214,211,208,207,206,206,205,202,199,193,190,187,182,179,176,173,170,167,163,158,152,146,141,135,129,122,114,108,102,97,90,85,81,77,73,68,65,62,61,61,61,61,61,60,59,59,60,61,64,69,75,82,92,104,117,128,137,144,149,153,156,160,164,169,175,180,184,188,191,193,195,196,200,203,207,212,218,223,228,231,234,235,236,327,327,330,333,328,321,316,308,298,287,274,263,255,249,243,239,234,230,225,220,215,210,206,204,204,199,195,190,185,181,177,175,173,171,170,169,169,168,167,166,166,166,163,161,159,158,157,156,154,152,150,149,149,150,150,151,151,152,153,153,153,154,154,154,154,153,152,152,150,149,148,146,145,144,144,143,142,142,141,140,139,137,137,138,136,137,137,136,137,136,134,133,132,132,132,132,132,134,136,138,141,142,142,143,145,150,154,156,158,160,162,164,167,169,172,175,176,175,174,172,170,171,173,178,185,191,198,210,223,235,244,254,265,273,283,290,296,302,307,309,313,316,318,320,322,320,319,317,313,311,306,300,297,294,293,290,287,286,285,282,279,274,271,270,270,269,274,271,267,264,262,259,255,250,244,237,232,227,223,220,215,210,205,199,195,193,197,206,221,239,258,276,291,302,311,318,323,324,322,320,319,320,319,317,314,311,307,302,294,286,280,276,272,267,259,251,245,241,241,241,242,244,245,245,242,237,232,228,225,216,215,216,217,217,215,211,206,202,200,201,203,201,196,188,176,163,149,138,129,119,108,98,89,79,71,66,66,67,67,68,69,71,74,77,79,81,85,91,99,109,119,132,145,157,168,175,179,183,185,188,188,187,184,179,172,163,159,157,155,153,151,149,148,148,148,147,146,145,145,144,143,143,143,144,145,146,145,144,143,142,140,140,140,140,140,143,147,150,152,152,152,154,155,142,140,138,134,131,130,128,127,126,126,126,126,127,129,131,132,134,136,136,136,136,135,134,132,130,130,130,129,128,127,125,124,123,123,122,121,120,118,115,112,111,111,110,110,109,108,107,107,107,108,107,105,105,105,105,104,103,102,99,97,96,94,94,93,93,92,91,92,94,95,96,97,99,102,104,112,112,112,111,110,107,104,105,105,103,99,96,94,95,102,114,128,144,160,173,185,196,205,209,214,219,226,234,241,248,255,260,265,268,270,272,271,271,268,265,261,256,253,250,246,244,241,237,233,229,225,222,204,200,197,193,190,186,182,179,175,171,168,164,158,154,151,148,145,141,133,139,152,173,196,217,233,244,249,250,253,256,260,263,265,265,264,260,254,246,234,217,200,188,181,175,169,164,159,154,147,138,132,129,127,123,117,111,106,104,103,100,94,88,83,78,75,73,71,69,68,67,67,68,70,71,71,70,69,68,67,67,67,66,67,69,71,74,76,78,80,80,80,80,80,80,82,84,87,90,92,87,87,86,86,86,86,87,87,87,85,83,82,83,87,95,107,118,130,141,149,172,179,187,201,214,221,225,230,232,230,223,216,208,199,191,185,181,177,176,177,176,173,171,169,163,154,152,153,154,154,153,151,150,150,150,152,149,147,148,150,152,152,152,151,151,150,149,147,146,143,140,138,136,137,138,140,138,135,132,130,129,129,129,130,130,129,128,128,128,129,129,128,127,126,125,125,125,125,124,124,121,120,120,123,124,123,122,120,115,113,114,114,115,116,115,112,111,111,109,108,107,107,110,113,114,115,115,115,114,113,113,116,119,120,121,121,122,123,124,125,126,126,126,126,126,127,127,125,122,118,115,111,112,115,117,120,124,127,131,137,143,148,153,159,166,172,178,184,191,199,206,212,217,223,229,232,233,235,237,240,241,243,246,247,246,243,240,234,229,225,221,217,216,215,215,215,212,208,203,199,196,194,190,185,180,177,163,158,152,149,153,163,174,182,188,192,195,197,201,204,205,203,199,195,189,184,176,169,162,150,138,128,119,110,100,90,80,73,68,64,63,63,66,68,70,71,72,74,80,94,116,141,164,183,198,210,220,228,233,237,241,247,252,256,260,259,258,256,251,245,238,234,227,221,215,208,207,207,203,201,201,199,179,176,171,163,152,137,119,98,77,61,50,45,47,59,71,86,99,109,116,117,115,111,107,102,96,91,90,94,97,97,95,92,87,84,84,83,84,86,86,86,84,82,82,81,81,82,84,87,89,91,92,94,93,93,94,96,100,101,99,97,96,96,97,97,98,99,101,102,106,114,121,127,130,124,105,109,119,127,129,132,129,126,126,126,126,126,125,124,125,130,130,128,126,126,126,126,126,126,126,127,128,129,129,127,128,136,141,143,141,138,131,129,133,134,130,129,134,137,139,138,130,122,118,115,114,113,113,112,112,117,118,117,118,118,117,117,114,112,115,118,124,126,119,121,122,274,285,293,297,298,298,296,293,289,282,275,267,256,249,242,233,225,217,217,215,203,190,185,193,202,202,194,182,170,143,130,120,110,102,93,80,67,57,52,50,49,49,54,72,93,104,114,125,134,140,145,145,141,136,130,124,118,116,114,112,108,105,102,99,95,91,88,85,83,82,80,79,79,83,86,87,88,89,89,88,88,90,92,88,86,86,86,84,82,84,88,90,94,99,104,107,107,105,104,103,95,94,93,93,93,93,93,94,99,109,122,172,169,164,156,147,137,126,115,104,99,99,103,106,111,115,117,118,120,120,120,120,119,119,118,118,117,116,115,115,116,116,115,115,114,112,109,110,111,111,110,109,109,109,108,107,106,105,101,100,99,99,98,97,97]},\"selected\":{\"id\":\"2000\"},\"selection_policy\":{\"id\":\"1999\"}},\"id\":\"1909\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1898\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1897\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1995\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1994\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1998\",\"type\":\"AllLabels\"},{\"attributes\":{\"mantissas\":[1,2,5],\"max_interval\":500.0,\"num_minor_ticks\":0},\"id\":\"2002\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1999\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2013\",\"type\":\"YearsTicker\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"text\":\"Glocose Range\"},\"id\":\"1876\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1899\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1882\",\"type\":\"LinearScale\"},{\"attributes\":{\"tools\":[{\"id\":\"1894\"},{\"id\":\"1895\"},{\"id\":\"1896\"},{\"id\":\"1897\"},{\"id\":\"1898\"},{\"id\":\"1899\"}]},\"id\":\"1901\",\"type\":\"Toolbar\"},{\"attributes\":{\"days\":[1,4,7,10,13,16,19,22,25,28]},\"id\":\"2006\",\"type\":\"DaysTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1912\",\"type\":\"Line\"},{\"attributes\":{\"base\":24,\"mantissas\":[1,2,4,6,8,12],\"max_interval\":43200000.0,\"min_interval\":3600000.0,\"num_minor_ticks\":0},\"id\":\"2004\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1884\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1909\"},\"glyph\":{\"id\":\"1910\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1912\"},\"nonselection_glyph\":{\"id\":\"1911\"},\"view\":{\"id\":\"1914\"}},\"id\":\"1913\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1910\",\"type\":\"Line\"},{\"attributes\":{\"num_minor_ticks\":5,\"tickers\":[{\"id\":\"2002\"},{\"id\":\"2003\"},{\"id\":\"2004\"},{\"id\":\"2005\"},{\"id\":\"2006\"},{\"id\":\"2007\"},{\"id\":\"2008\"},{\"id\":\"2009\"},{\"id\":\"2010\"},{\"id\":\"2011\"},{\"id\":\"2012\"},{\"id\":\"2013\"}]},\"id\":\"1887\",\"type\":\"DatetimeTicker\"},{\"attributes\":{\"days\":[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]},\"id\":\"2005\",\"type\":\"DaysTicker\"},{\"attributes\":{},\"id\":\"1891\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1900\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1880\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1886\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1889\",\"type\":\"Grid\"},{\"attributes\":{\"base\":60,\"mantissas\":[1,2,5,10,15,20,30],\"max_interval\":1800000.0,\"min_interval\":1000.0,\"num_minor_ticks\":0},\"id\":\"2003\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"days\":[1,15]},\"id\":\"2008\",\"type\":\"DaysTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1994\"},\"group\":null,\"major_label_policy\":{\"id\":\"1995\"},\"ticker\":{\"id\":\"1891\"}},\"id\":\"1890\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1909\"}},\"id\":\"1914\",\"type\":\"CDSView\"},{\"attributes\":{\"months\":[0,1,2,3,4,5,6,7,8,9,10,11]},\"id\":\"2009\",\"type\":\"MonthsTicker\"},{\"attributes\":{},\"id\":\"1878\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2000\",\"type\":\"Selection\"},{\"attributes\":{\"days\":[1,8,15,22]},\"id\":\"2007\",\"type\":\"DaysTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1908\"},\"group\":null,\"major_label_orientation\":1.0471975511965976,\"major_label_policy\":{\"id\":\"1998\"},\"ticker\":{\"id\":\"1887\"}},\"id\":\"1886\",\"type\":\"DatetimeAxis\"},{\"attributes\":{\"days\":[\"%m/%d/%Y\"]},\"id\":\"1908\",\"type\":\"DatetimeTickFormatter\"},{\"attributes\":{\"months\":[0,2,4,6,8,10]},\"id\":\"2010\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1890\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1893\",\"type\":\"Grid\"},{\"attributes\":{\"months\":[0,4,8]},\"id\":\"2011\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1911\",\"type\":\"Line\"}],\"root_ids\":[\"1875\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
1087
+ " const render_items = [{\"docid\":\"937af2f8-2e2e-4623-be45-efe8df25dc78\",\"root_ids\":[\"1875\"],\"roots\":{\"1875\":\"d719ddd1-c646-49d9-bc18-de1e61613b70\"}}];\n",
1088
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
1089
+ " }\n",
1090
+ " if (root.Bokeh !== undefined) {\n",
1091
+ " embed_document(root);\n",
1092
+ " } else {\n",
1093
+ " let attempts = 0;\n",
1094
+ " const timer = setInterval(function(root) {\n",
1095
+ " if (root.Bokeh !== undefined) {\n",
1096
+ " clearInterval(timer);\n",
1097
+ " embed_document(root);\n",
1098
+ " } else {\n",
1099
+ " attempts++;\n",
1100
+ " if (attempts > 100) {\n",
1101
+ " clearInterval(timer);\n",
1102
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
1103
+ " }\n",
1104
+ " }\n",
1105
+ " }, 10, root)\n",
1106
+ " }\n",
1107
+ "})(window);"
1108
+ ],
1109
+ "application/vnd.bokehjs_exec.v0+json": ""
1110
+ },
1111
+ "metadata": {
1112
+ "application/vnd.bokehjs_exec.v0+json": {
1113
+ "id": "1875"
1114
+ }
1115
+ },
1116
+ "output_type": "display_data"
1117
+ }
1118
+ ],
1119
+ "source": [
1120
+ "from math import pi\n",
1121
+ "from bokeh.sampledata.glucose import data\n",
1122
+ "\n",
1123
+ "week = data.loc['2010-10-01':'2010-10-08']\n",
1124
+ "\n",
1125
+ "p = figure(x_axis_type=\"datetime\", title=\"Glocose Range\", plot_height=350, plot_width=800)\n",
1126
+ "p.xaxis.formatter.days = '%m/%d/%Y'\n",
1127
+ "p.xaxis.major_label_orientation = pi/3\n",
1128
+ "\n",
1129
+ "p.line(week.index, week.glucose)\n",
1130
+ "\n",
1131
+ "show(p)"
1132
+ ]
1133
+ },
1134
+ {
1135
+ "cell_type": "markdown",
1136
+ "metadata": {
1137
+ "Collapsed": "false"
1138
+ },
1139
+ "source": [
1140
+ "See the reference guide entry for [DatetimeTickFormatter](https://bokeh.pydata.org/en/latest/docs/reference/models/formatters.html#bokeh.models.formatters.DatetimeTickFormatter) to see other properties that can be updated. \n",
1141
+ "\n",
1142
+ "In addition to the tick formatters that Bokeh will use by default, there are others such as the [`NumeralTickFormatter`](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#numeraltickformatter) that we can configure explicitly. The example below shows how to set a formatter on each axis. "
1143
+ ]
1144
+ },
1145
+ {
1146
+ "cell_type": "code",
1147
+ "execution_count": 15,
1148
+ "metadata": {
1149
+ "Collapsed": "false"
1150
+ },
1151
+ "outputs": [
1152
+ {
1153
+ "data": {
1154
+ "text/html": [
1155
+ "\n",
1156
+ " <div class=\"bk-root\" id=\"00bef9b4-411e-4a27-afb7-a14a33bc4da2\" data-root-id=\"2124\"></div>\n"
1157
+ ]
1158
+ },
1159
+ "metadata": {},
1160
+ "output_type": "display_data"
1161
+ },
1162
+ {
1163
+ "data": {
1164
+ "application/javascript": [
1165
+ "(function(root) {\n",
1166
+ " function embed_document(root) {\n",
1167
+ " const docs_json = {\"4604946f-4adc-4cca-bcf5-62c69fddf599\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2133\"}],\"center\":[{\"id\":\"2136\"},{\"id\":\"2140\"}],\"height\":300,\"left\":[{\"id\":\"2137\"}],\"renderers\":[{\"id\":\"2159\"}],\"title\":{\"id\":\"2264\"},\"toolbar\":{\"id\":\"2148\"},\"width\":800,\"x_range\":{\"id\":\"2125\"},\"x_scale\":{\"id\":\"2129\"},\"y_range\":{\"id\":\"2127\"},\"y_scale\":{\"id\":\"2131\"}},\"id\":\"2124\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2131\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2161\"},\"group\":null,\"major_label_policy\":{\"id\":\"2269\"},\"ticker\":{\"id\":\"2134\"}},\"id\":\"2133\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2146\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2129\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"2133\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"2136\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2138\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2163\"},\"group\":null,\"major_label_policy\":{\"id\":\"2267\"},\"ticker\":{\"id\":\"2138\"}},\"id\":\"2137\",\"type\":\"LinearAxis\"},{\"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\":\"2147\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2157\",\"type\":\"Circle\"},{\"attributes\":{\"tools\":[{\"id\":\"2141\"},{\"id\":\"2142\"},{\"id\":\"2143\"},{\"id\":\"2144\"},{\"id\":\"2145\"},{\"id\":\"2146\"}]},\"id\":\"2148\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"2137\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"2140\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2269\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2267\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"2271\"},\"selection_policy\":{\"id\":\"2270\"}},\"id\":\"2155\",\"type\":\"ColumnDataSource\"},{\"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\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2158\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"2125\",\"type\":\"DataRange1d\"},{\"attributes\":{\"format\":\"0.0%\"},\"id\":\"2161\",\"type\":\"NumeralTickFormatter\"},{\"attributes\":{},\"id\":\"2127\",\"type\":\"DataRange1d\"},{\"attributes\":{\"format\":\"$0.00\"},\"id\":\"2163\",\"type\":\"NumeralTickFormatter\"},{\"attributes\":{},\"id\":\"2141\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2155\"},\"glyph\":{\"id\":\"2156\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2158\"},\"nonselection_glyph\":{\"id\":\"2157\"},\"view\":{\"id\":\"2160\"}},\"id\":\"2159\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2264\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2145\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2142\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"2155\"}},\"id\":\"2160\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"2147\"}},\"id\":\"2143\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2144\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2271\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2270\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2134\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2156\",\"type\":\"Circle\"}],\"root_ids\":[\"2124\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
1168
+ " const render_items = [{\"docid\":\"4604946f-4adc-4cca-bcf5-62c69fddf599\",\"root_ids\":[\"2124\"],\"roots\":{\"2124\":\"00bef9b4-411e-4a27-afb7-a14a33bc4da2\"}}];\n",
1169
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
1170
+ " }\n",
1171
+ " if (root.Bokeh !== undefined) {\n",
1172
+ " embed_document(root);\n",
1173
+ " } else {\n",
1174
+ " let attempts = 0;\n",
1175
+ " const timer = setInterval(function(root) {\n",
1176
+ " if (root.Bokeh !== undefined) {\n",
1177
+ " clearInterval(timer);\n",
1178
+ " embed_document(root);\n",
1179
+ " } else {\n",
1180
+ " attempts++;\n",
1181
+ " if (attempts > 100) {\n",
1182
+ " clearInterval(timer);\n",
1183
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
1184
+ " }\n",
1185
+ " }\n",
1186
+ " }, 10, root)\n",
1187
+ " }\n",
1188
+ "})(window);"
1189
+ ],
1190
+ "application/vnd.bokehjs_exec.v0+json": ""
1191
+ },
1192
+ "metadata": {
1193
+ "application/vnd.bokehjs_exec.v0+json": {
1194
+ "id": "2124"
1195
+ }
1196
+ },
1197
+ "output_type": "display_data"
1198
+ }
1199
+ ],
1200
+ "source": [
1201
+ "from bokeh.models import NumeralTickFormatter\n",
1202
+ "\n",
1203
+ "p = figure(plot_height=300, plot_width=800)\n",
1204
+ "p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)\n",
1205
+ "\n",
1206
+ "p.xaxis.formatter = NumeralTickFormatter(format=\"0.0%\")\n",
1207
+ "p.yaxis.formatter = NumeralTickFormatter(format=\"$0.00\")\n",
1208
+ "\n",
1209
+ "show(p)"
1210
+ ]
1211
+ },
1212
+ {
1213
+ "cell_type": "markdown",
1214
+ "metadata": {
1215
+ "Collapsed": "false"
1216
+ },
1217
+ "source": [
1218
+ "Try experimenting with the format argument and re-execute the cell above.\n",
1219
+ "\n",
1220
+ "There are many other possibilities for controlling tick formatting, including the possibility of supplying a JavaScript snippet to perform arbitrary formatting in the browser. See the [Tick Label Formats](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#tick-label-formats) for more details. \n",
1221
+ "\n",
1222
+ "\n",
1223
+ "It is also possible to customize *where* ticks will be drawn. See the [Tick Locations](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#tick-locations) section of the User's Guide for more information."
1224
+ ]
1225
+ },
1226
+ {
1227
+ "cell_type": "markdown",
1228
+ "metadata": {
1229
+ "Collapsed": "false"
1230
+ },
1231
+ "source": [
1232
+ "# Grids\n",
1233
+ "\n",
1234
+ "It is also possible to control the [styling of Grids](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#grids)\n",
1235
+ "\n",
1236
+ "Grids properties in Bokeh have two possible prefixes:\n",
1237
+ "\n",
1238
+ "* **grid** properties (which are [line properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#line-properties)) control the \"grid lines\"\n",
1239
+ "* **band** properties (which are [fill properties](https://bokeh.pydata.org/en/latest/docs/user_guide/styling.html#fill-properties)) control shaded bands between grid lines\n",
1240
+ "\n",
1241
+ "In this first example we turn off the vertical grid lines (by setting the line color to None) and set the horizontal grid to be light and dashed."
1242
+ ]
1243
+ },
1244
+ {
1245
+ "cell_type": "code",
1246
+ "execution_count": 16,
1247
+ "metadata": {
1248
+ "Collapsed": "false"
1249
+ },
1250
+ "outputs": [
1251
+ {
1252
+ "data": {
1253
+ "text/html": [
1254
+ "\n",
1255
+ " <div class=\"bk-root\" id=\"02fe1abd-a0c3-4f37-8b69-03faf7b03d15\" data-root-id=\"2318\"></div>\n"
1256
+ ]
1257
+ },
1258
+ "metadata": {},
1259
+ "output_type": "display_data"
1260
+ },
1261
+ {
1262
+ "data": {
1263
+ "application/javascript": [
1264
+ "(function(root) {\n",
1265
+ " function embed_document(root) {\n",
1266
+ " const docs_json = {\"7da1e12d-fac7-419b-a79e-c9938288f309\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2327\"}],\"center\":[{\"id\":\"2330\"},{\"id\":\"2334\"}],\"height\":400,\"left\":[{\"id\":\"2331\"}],\"renderers\":[{\"id\":\"2353\"}],\"title\":{\"id\":\"2463\"},\"toolbar\":{\"id\":\"2342\"},\"width\":400,\"x_range\":{\"id\":\"2319\"},\"x_scale\":{\"id\":\"2323\"},\"y_range\":{\"id\":\"2321\"},\"y_scale\":{\"id\":\"2325\"}},\"id\":\"2318\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2319\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2335\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2339\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2472\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2336\",\"type\":\"WheelZoomTool\"},{\"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\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2352\",\"type\":\"Circle\"},{\"attributes\":{\"overlay\":{\"id\":\"2341\"}},\"id\":\"2337\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2470\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2349\"},\"glyph\":{\"id\":\"2350\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2352\"},\"nonselection_glyph\":{\"id\":\"2351\"},\"view\":{\"id\":\"2354\"}},\"id\":\"2353\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2338\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2466\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2328\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2323\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"2349\"}},\"id\":\"2354\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2325\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2340\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"2469\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2467\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2469\"},\"group\":null,\"major_label_policy\":{\"id\":\"2470\"},\"ticker\":{\"id\":\"2328\"}},\"id\":\"2327\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"2327\"},\"coordinates\":null,\"grid_line_color\":null,\"group\":null,\"ticker\":null},\"id\":\"2330\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2463\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"2332\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2466\"},\"group\":null,\"major_label_policy\":{\"id\":\"2467\"},\"ticker\":{\"id\":\"2332\"}},\"id\":\"2331\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2471\",\"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\":\"2341\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"2335\"},{\"id\":\"2336\"},{\"id\":\"2337\"},{\"id\":\"2338\"},{\"id\":\"2339\"},{\"id\":\"2340\"}]},\"id\":\"2342\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"2331\"},\"coordinates\":null,\"dimension\":1,\"grid_line_alpha\":0.5,\"grid_line_dash\":[6,4],\"group\":null,\"ticker\":null},\"id\":\"2334\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2350\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"2472\"},\"selection_policy\":{\"id\":\"2471\"}},\"id\":\"2349\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"2321\",\"type\":\"DataRange1d\"},{\"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\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2351\",\"type\":\"Circle\"}],\"root_ids\":[\"2318\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
1267
+ " const render_items = [{\"docid\":\"7da1e12d-fac7-419b-a79e-c9938288f309\",\"root_ids\":[\"2318\"],\"roots\":{\"2318\":\"02fe1abd-a0c3-4f37-8b69-03faf7b03d15\"}}];\n",
1268
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
1269
+ " }\n",
1270
+ " if (root.Bokeh !== undefined) {\n",
1271
+ " embed_document(root);\n",
1272
+ " } else {\n",
1273
+ " let attempts = 0;\n",
1274
+ " const timer = setInterval(function(root) {\n",
1275
+ " if (root.Bokeh !== undefined) {\n",
1276
+ " clearInterval(timer);\n",
1277
+ " embed_document(root);\n",
1278
+ " } else {\n",
1279
+ " attempts++;\n",
1280
+ " if (attempts > 100) {\n",
1281
+ " clearInterval(timer);\n",
1282
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
1283
+ " }\n",
1284
+ " }\n",
1285
+ " }, 10, root)\n",
1286
+ " }\n",
1287
+ "})(window);"
1288
+ ],
1289
+ "application/vnd.bokehjs_exec.v0+json": ""
1290
+ },
1291
+ "metadata": {
1292
+ "application/vnd.bokehjs_exec.v0+json": {
1293
+ "id": "2318"
1294
+ }
1295
+ },
1296
+ "output_type": "display_data"
1297
+ }
1298
+ ],
1299
+ "source": [
1300
+ "p = figure(plot_width=400, plot_height=400)\n",
1301
+ "p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)\n",
1302
+ "\n",
1303
+ "# change just some things about the x-grid\n",
1304
+ "p.xgrid.grid_line_color = None\n",
1305
+ "\n",
1306
+ "# change just some things about the y-grid\n",
1307
+ "p.ygrid.grid_line_alpha = 0.5\n",
1308
+ "p.ygrid.grid_line_dash = [6, 4]\n",
1309
+ "\n",
1310
+ "show(p)"
1311
+ ]
1312
+ },
1313
+ {
1314
+ "cell_type": "markdown",
1315
+ "metadata": {
1316
+ "Collapsed": "false"
1317
+ },
1318
+ "source": [
1319
+ "The next example shows how the \"band\" properties of a plot can be specified"
1320
+ ]
1321
+ },
1322
+ {
1323
+ "cell_type": "code",
1324
+ "execution_count": 17,
1325
+ "metadata": {
1326
+ "Collapsed": "false"
1327
+ },
1328
+ "outputs": [
1329
+ {
1330
+ "data": {
1331
+ "text/html": [
1332
+ "\n",
1333
+ " <div class=\"bk-root\" id=\"5f737c3b-3707-4aef-aceb-4b5ee0adda00\" data-root-id=\"2529\"></div>\n"
1334
+ ]
1335
+ },
1336
+ "metadata": {},
1337
+ "output_type": "display_data"
1338
+ },
1339
+ {
1340
+ "data": {
1341
+ "application/javascript": [
1342
+ "(function(root) {\n",
1343
+ " function embed_document(root) {\n",
1344
+ " const docs_json = {\"2ea6dd01-cd62-4f10-b8cb-899422503209\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"2538\"}],\"center\":[{\"id\":\"2541\"},{\"id\":\"2545\"}],\"height\":400,\"left\":[{\"id\":\"2542\"}],\"renderers\":[{\"id\":\"2564\"}],\"title\":{\"id\":\"2685\"},\"toolbar\":{\"id\":\"2553\"},\"width\":400,\"x_range\":{\"id\":\"2530\"},\"x_scale\":{\"id\":\"2534\"},\"y_range\":{\"id\":\"2532\"},\"y_scale\":{\"id\":\"2536\"}},\"id\":\"2529\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2549\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2539\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2550\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2534\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2691\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2536\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2551\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2691\"},\"group\":null,\"major_label_policy\":{\"id\":\"2692\"},\"ticker\":{\"id\":\"2539\"}},\"id\":\"2538\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"2685\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"2538\"},\"coordinates\":null,\"grid_line_color\":null,\"group\":null,\"ticker\":null},\"id\":\"2541\",\"type\":\"Grid\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"2560\"},\"glyph\":{\"id\":\"2561\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2563\"},\"nonselection_glyph\":{\"id\":\"2562\"},\"view\":{\"id\":\"2565\"}},\"id\":\"2564\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2543\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"2688\"},\"group\":null,\"major_label_policy\":{\"id\":\"2689\"},\"ticker\":{\"id\":\"2543\"}},\"id\":\"2542\",\"type\":\"LinearAxis\"},{\"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\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2562\",\"type\":\"Circle\"},{\"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\":\"2552\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"size\":{\"value\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2561\",\"type\":\"Circle\"},{\"attributes\":{\"tools\":[{\"id\":\"2546\"},{\"id\":\"2547\"},{\"id\":\"2548\"},{\"id\":\"2549\"},{\"id\":\"2550\"},{\"id\":\"2551\"}]},\"id\":\"2553\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"2542\"},\"band_fill_alpha\":0.1,\"band_fill_color\":\"navy\",\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"2545\",\"type\":\"Grid\"},{\"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\":10},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2563\",\"type\":\"Circle\"},{\"attributes\":{\"data\":{\"x\":[1,2,3,4,5],\"y\":[2,5,8,2,7]},\"selected\":{\"id\":\"2694\"},\"selection_policy\":{\"id\":\"2693\"}},\"id\":\"2560\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"2560\"}},\"id\":\"2565\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2530\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2694\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2532\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"2693\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2546\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2689\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2688\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2547\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2692\",\"type\":\"AllLabels\"},{\"attributes\":{\"overlay\":{\"id\":\"2552\"}},\"id\":\"2548\",\"type\":\"BoxZoomTool\"}],\"root_ids\":[\"2529\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n",
1345
+ " const render_items = [{\"docid\":\"2ea6dd01-cd62-4f10-b8cb-899422503209\",\"root_ids\":[\"2529\"],\"roots\":{\"2529\":\"5f737c3b-3707-4aef-aceb-4b5ee0adda00\"}}];\n",
1346
+ " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
1347
+ " }\n",
1348
+ " if (root.Bokeh !== undefined) {\n",
1349
+ " embed_document(root);\n",
1350
+ " } else {\n",
1351
+ " let attempts = 0;\n",
1352
+ " const timer = setInterval(function(root) {\n",
1353
+ " if (root.Bokeh !== undefined) {\n",
1354
+ " clearInterval(timer);\n",
1355
+ " embed_document(root);\n",
1356
+ " } else {\n",
1357
+ " attempts++;\n",
1358
+ " if (attempts > 100) {\n",
1359
+ " clearInterval(timer);\n",
1360
+ " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
1361
+ " }\n",
1362
+ " }\n",
1363
+ " }, 10, root)\n",
1364
+ " }\n",
1365
+ "})(window);"
1366
+ ],
1367
+ "application/vnd.bokehjs_exec.v0+json": ""
1368
+ },
1369
+ "metadata": {
1370
+ "application/vnd.bokehjs_exec.v0+json": {
1371
+ "id": "2529"
1372
+ }
1373
+ },
1374
+ "output_type": "display_data"
1375
+ }
1376
+ ],
1377
+ "source": [
1378
+ "p = figure(plot_width=400, plot_height=400)\n",
1379
+ "p.circle([1,2,3,4,5], [2,5,8,2,7], size=10)\n",
1380
+ "\n",
1381
+ "# change just some things about the x-grid\n",
1382
+ "p.xgrid.grid_line_color = None\n",
1383
+ "\n",
1384
+ "# change just some things about the y-grid\n",
1385
+ "p.ygrid.band_fill_alpha = 0.1\n",
1386
+ "p.ygrid.band_fill_color = \"navy\"\n",
1387
+ "\n",
1388
+ "show(p)"
1389
+ ]
1390
+ },
1391
+ {
1392
+ "cell_type": "code",
1393
+ "execution_count": 18,
1394
+ "metadata": {
1395
+ "Collapsed": "false"
1396
+ },
1397
+ "outputs": [],
1398
+ "source": [
1399
+ "# EXERCISE Create a plot of your own and customize several grid properties\n"
1400
+ ]
1401
+ },
1402
+ {
1403
+ "cell_type": "markdown",
1404
+ "metadata": {},
1405
+ "source": [
1406
+ "# Next Section"
1407
+ ]
1408
+ },
1409
+ {
1410
+ "cell_type": "markdown",
1411
+ "metadata": {},
1412
+ "source": [
1413
+ "Click on this link to go to the next notebook: [03 - Data Sources and Transformations](03%20-%20Data%20Sources%20and%20Transformations.ipynb).\n",
1414
+ "\n",
1415
+ "To go back to the overview, click [here](00%20-%20Introduction%20and%20Setup.ipynb)."
1416
+ ]
1417
+ }
1418
+ ],
1419
+ "metadata": {
1420
+ "kernelspec": {
1421
+ "display_name": "Python 3",
1422
+ "language": "python",
1423
+ "name": "python3"
1424
+ },
1425
+ "language_info": {
1426
+ "codemirror_mode": {
1427
+ "name": "ipython",
1428
+ "version": 3
1429
+ },
1430
+ "file_extension": ".py",
1431
+ "mimetype": "text/x-python",
1432
+ "name": "python",
1433
+ "nbconvert_exporter": "python",
1434
+ "pygments_lexer": "ipython3",
1435
+ "version": "3.7.9"
1436
+ }
1437
+ },
1438
+ "nbformat": 4,
1439
+ "nbformat_minor": 4
1440
+ }