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.
- checksums.yaml +4 -4
- data/assets/data/banner.html +24 -1
- data/assets/themes/j1/adapter/js/masterslider.js +22 -5
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +56 -0
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +270 -270
- data/lib/starter_web/_config.yml +19 -9
- data/lib/starter_web/_data/blocks/banner.yml +17 -0
- data/lib/starter_web/_data/modules/defaults/masterslider.yml +1 -1
- data/lib/starter_web/_data/modules/justifiedGallery.yml +82 -0
- data/lib/starter_web/_data/modules/masterslider.yml +5 -9
- data/lib/starter_web/_data/modules/navigator_menu.yml +208 -168
- data/lib/starter_web/_includes/attributes.asciidoc +18 -14
- data/lib/starter_web/_includes/tables/template_variables.asciidoc +1 -1
- data/lib/starter_web/_plugins/asciidoctor-extensions/lightbox-block.rb +4 -4
- data/lib/starter_web/assets/images/pages/features/blog-post-navigator-1280x1000.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.png +0 -0
- data/lib/starter_web/assets/images/pages/features/clipboard-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/comments-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/cookie-consent-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/desktop-web-navigation-1280x1000.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/example-content-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/fab-1280x500.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/full-text-search-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.png +0 -0
- data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.png +0 -0
- data/lib/starter_web/assets/images/pages/features/intro-panel-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/master-header-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.png +0 -0
- data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.png +0 -0
- data/lib/starter_web/assets/images/pages/features/nav-module-1280x300.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/nbi-barchart-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/teaser-banner-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/translator-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/sticker/600x600/sticker-new-version.png +0 -0
- data/lib/starter_web/assets/images/sticker/scalable/readme +0 -0
- data/lib/starter_web/package.json +6 -6
- data/lib/starter_web/pages/public/_jupyter/docs/_includes/attributes.asciidoc +67 -0
- data/lib/starter_web/pages/public/_jupyter/docs/_includes/documents/j1_docs_example_static.asciidoc +232 -0
- data/lib/starter_web/pages/public/_jupyter/docs/binderhub.adoc +631 -0
- data/lib/starter_web/pages/public/_jupyter/docs/j1-nbinteract.adoc +638 -0
- data/lib/starter_web/pages/public/_jupyter/docs/jupyterhub.adoc +248 -0
- data/lib/starter_web/pages/public/_jupyter/docs/nbinteract-widget-manual.adoc +928 -0
- data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-circular-times-table.adoc +139 -0
- data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-common-used-widgets.adoc +229 -0
- data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-odes-in-python.adoc +112 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-altair/j1-altair-visualisations.adoc +142 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bokeh-visualisations.adoc +171 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bqplot-eamples.adoc +111 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-plotly/j1-plotly-visualisations.adoc +94 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1_climate-change-forecast.adoc +106 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16260 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_bgplot_line_plot-checkpoint.ipynb +247 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-Copy1-checkpoint.ipynb +12382 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-checkpoint.ipynb +12387 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-short-checkpoint.ipynb +12170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_climate_change_forecast-checkpoint.ipynb +1058 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_docs_example_dynamic-checkpoint.ipynb +14478 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-Copy1-checkpoint.ipynb +379 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-checkpoint.ipynb +442 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets-checkpoint.ipynb +523 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.line_charts-checkpoint.ipynb +84 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.questions-checkpoint.ipynb +194 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_chart-checkpoint.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-Copy1-checkpoint.ipynb +164 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-checkpoint.ipynb +173 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts.1-checkpoint.ipynb +256 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_barcharts-checkpoint.ipynb +126 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_hist_chart-checkpoint.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_chart-checkpoint.ipynb +90 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_charts-checkpoint.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_multiple_choice-checkpoint.ipynb +64 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_short_answer-checkpoint.ipynb +122 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_questions-checkpoint.ipynb +181 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_chart-checkpoint.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_charts-checkpoint.ipynb +175 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_drag_chart-checkpoint.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_ode_selected-checkpoint.ipynb +14478 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_odes_in_python-checkpoint.ipynb +15227 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/factor_by_factor.mp4 +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_circular_times_table.ipynb +12382 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_climate_change_forecast.ipynb +1058 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_docs_example_dynamic.ipynb +14478 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_interactive_widgets.ipynb +442 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets.ipynb +523 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_bar_chart.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_hist_chart.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_line_chart.ipynb +90 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_multiple_choice.ipynb +64 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_short_answer.ipynb +122 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_chart.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_drag_chart.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_odes_in_python.ipynb +15227 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/line_by_line.mp4 +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/point_by_point.mp4 +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16296 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_non_interactive-checkpoint.ipynb +15385 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_interactive.ipynb +16296 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_non_interactive.ipynb +15385 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/00 - Introduction and Setup-checkpoint.ipynb +717 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/01 - Basic Plotting-checkpoint.ipynb +1381 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/02 - Styling and Theming-checkpoint.ipynb +1440 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/03 - Data Sources and Transformations-checkpoint.ipynb +927 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/04 - Adding Annotations-checkpoint.ipynb +1105 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/05 - Presentation Layouts-checkpoint.ipynb +578 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/06 - Linking and Interactions-checkpoint.ipynb +1196 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/07 - Bar and Categorical Data Plots-checkpoint.ipynb +1681 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/08 - Graph and Network Plots-checkpoint.ipynb +680 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/09 - Geographic Plots-checkpoint.ipynb +693 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/10 - Exporting and Embedding-checkpoint.ipynb +751 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/11 - Running Bokeh Applications-checkpoint.ipynb +770 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/bokeh_tut_00_introduction_and_setup-checkpoint.ipynb +666 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_01_basic_plotting-checkpoint.ipynb +1365 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_02_styling_and_theming-checkpoint.ipynb +1405 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_03_data_sources_and_transformations-checkpoint.ipynb +856 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_04_adding_annotations-checkpoint.ipynb +1167 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_05_presentation_layouts-checkpoint.ipynb +601 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_06_linking_and_interactions-checkpoint.ipynb +1356 -0
- 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
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_08_graph_and_network_plots-checkpoint.ipynb +625 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_09_geographic_plots-checkpoint.ipynb +685 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.ipynb +726 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.org +726 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding.new-checkpoint.ipynb +560 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_11_running_bokeh_applications-checkpoint.ipynb +716 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_01_basic_plotting.ipynb +1365 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_02_styling_and_theming.ipynb +1405 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_03_data_sources_and_transformations.ipynb +856 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_04_adding_annotations.ipynb +1167 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_05_presentation_layouts.ipynb +601 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_06_linking_and_interactions.ipynb +1356 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_07_bar_and_categorical_data_plots.ipynb +1742 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_08_graph_and_network_plots.ipynb +625 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_09_geographic_plots.ipynb +685 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/.ipynb_checkpoints/j1_mathplot_vs_bqplot-checkpoint.ipynb +336 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/advanced/Feature_Vector_Distribution-Iris-Digits.ipynb +433 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_bgplot_line_plot.ipynb +244 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_circular_times_table-short.ipynb +12170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_mathplot_vs_bqplot.ipynb +336 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Index-checkpoint.ipynb +163 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Tutorials-checkpoint.ipynb +51 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Advanced Plotting.ipynb +289 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Animations.ipynb +266 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Axis Properties.ipynb +396 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Plotting Dates.ipynb +318 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/Time Series.ipynb +158 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/spx_prices.csv +6799 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb +470 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Index.ipynb +49 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Logs Analytics/Logs Dashboard.ipynb +378 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Mobile Patent Suits.ipynb +123 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Neural Network.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Outlier Detection.ipynb +311 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Bubble Chart.ipynb +255 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Choropleth.ipynb +275 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/nations.json +1 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/world_map_codes.csv +234 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Basic Plotting-checkpoint.ipynb +186 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Pyplot-checkpoint.ipynb +794 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Untitled-checkpoint.ipynb +323 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Basic Plotting.ipynb +261 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Pyplot.ipynb +1489 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Index.ipynb +163 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Interaction Layer.ipynb +966 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Mark Interactions.ipynb +476 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Selectors.ipynb +427 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Introduction.ipynb +528 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bars.ipynb +480 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bins.ipynb +217 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Boxplot.ipynb +253 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Candles.ipynb +225 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/FlexLine.ipynb +123 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Graph.ipynb +357 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/GridHeatMap.ipynb +422 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/HeatMap.ipynb +157 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Hist.ipynb +176 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Image.ipynb +195 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Label.ipynb +189 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Lines.ipynb +565 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Map.ipynb +182 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Market Map.ipynb +315 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Pie.ipynb +465 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Scatter.ipynb +835 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bars.ipynb +362 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bins.ipynb +252 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Boxplot.ipynb +273 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Candles.ipynb +242 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/GridHeatMap.ipynb +417 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/HeatMap.ipynb +155 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Hist.ipynb +238 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Image.ipynb +152 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Label.ipynb +206 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Lines.ipynb +474 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Map.ipynb +181 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Pie.ipynb +310 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Scatter.ipynb +702 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Scales/Color Scales.ipynb +495 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Feature_Vector_Distribution-Iris-Digits-checkpoint.ipynb +433 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Linking Plots With Widgets-checkpoint.ipynb +326 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-Copy1-checkpoint.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-checkpoint.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Brush Interval Selector.ipynb +154 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Fast Interval Selector.ipynb +152 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density Widget.ipynb +128 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density.ipynb +113 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Linking Plots With Widgets.ipynb +326 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Object Model.ipynb +179 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Pyplot.ipynb +174 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Updating Plots.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials.ipynb +51 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/country_codes.csv +213 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/gdp_per_capita.csv +56 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/state_codes.csv +52 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/trees.jpg +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_central_limit_theorem-checkpoint.ipynb +247 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_variability_of_the_sample_mean-checkpoint.ipynb +323 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_graphing-checkpoint.ipynb +387 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_interactive_questions-checkpoint.ipynb +185 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_layout-checkpoint.ipynb +384 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_interact-checkpoint.ipynb +254 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_monty_hall-checkpoint.ipynb +732 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_central_limit_theorem.ipynb +247 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_correlation.ipynb +651 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_empirical_distributions.ipynb +773 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_linear_regression.ipynb +111 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_probability_distribution_plots.ipynb +199 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_sampling_from_a_population.ipynb +421 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_variability_of_the_sample_mean.ipynb +323 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_graphing.ipynb +387 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_interactive_questions.ipynb +185 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_layout.ipynb +384 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_interact.ipynb +254 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_monty_hall.ipynb +732 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Advanced Plotting.html +373 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Animations.html +361 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Axis Properties.html +569 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bars.html +487 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Basic Plotting.html +341 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bins.html +259 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Boxplot.html +277 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Brush Interval Selector.html +182 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bubble Chart.html +299 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Candles.html +252 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Choropleth.html +318 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Color Scales.html +514 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Fast Interval Selector.html +182 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Feature_Vector_Distribution-Iris-Digits.html +479 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/FlexLine.html +128 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density Widget.html +152 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density.html +137 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Graph.html +484 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/GridHeatMap.html +483 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/HeatMap.html +170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Hist.html +349 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Image.html +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Index.html +29 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Interaction Layer.html +1372 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Introduction.html +749 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Label.html +268 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Lines.html +704 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Linking Plots With Widgets.html +389 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Logs Dashboard.html +455 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Map.html +229 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mark Interactions.html +613 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Market Map.html +413 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mobile Patent Suits.html +131 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Neural Network.html +190 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Object Model.html +193 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Outlier Detection.html +363 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pie.html +367 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Plotting Dates.html +337 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pyplot.html +196 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Scatter.html +948 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Selectors.html +489 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Time Series.html +173 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Tutorials.html +40 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Updating Plots.html +228 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_interactive.html +2216 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_non_interactive.html +1170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bgplot_line_plot.html +318 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_01_basic_plotting.html +1479 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_02_styling_and_theming.html +1524 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_03_data_sources_and_transformations.html +983 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_04_adding_annotations.html +1280 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_05_presentation_layouts.html +660 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_06_linking_and_interactions.html +1563 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_07_bar_and_categorical_data_plots.html +1888 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_08_graph_and_network_plots.html +689 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_09_geographic_plots.html +767 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table-short.html +475 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table.html +747 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_climate_change_forecast.html +1250 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_docs_example_dynamic.html +186 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_mathplot_vs_bqplot.html +407 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_central_limit_theorem.html +290 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_correlation.html +818 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_empirical_distributions.html +351 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_linear_regression.html +106 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_probability_distribution_plots.html +228 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_sampling_from_a_population.html +518 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_variability_of_the_sample_mean.html +372 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_graphing.html +473 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_interactive_questions.html +242 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_layout.html +496 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_interact.html +329 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_monty_hall.html +866 -0
- data/lib/starter_web/pages/public/_jupyter/where_to_go.adoc +270 -0
- data/lib/starter_web/pages/public/features/general.adoc +74 -33
- data/lib/starter_web/pages/public/features/template.adoc +159 -68
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -512
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -629
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -95
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -93
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -96
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -70
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -156
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -95
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -93
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -955
- data/lib/starter_web/pages/public/learn/_roundtrip/100_present_images.adoc +313 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/100_present_videos.adoc +281 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/200_typography.adoc +253 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/300_icon_fonts.adoc +579 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/400_asciidoc_extensions.adoc +718 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/410_bs_modals_extentions.adoc +91 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/420_responsive_tables_extensions.adoc +420 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/500_themes.adoc +250 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/600_quicksearch.adoc +425 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/attributes.asciidoc +118 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/100_gistblock.asciidoc +28 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_info.asciidoc +14 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_central_success.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_left_info.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_right_success.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +47 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_info.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_left_info.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_right_success.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +337 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +47 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/google-ad.js +130 -0
- data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +6 -5
- data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +1 -2
- data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +4 -2
- data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +1 -1
- data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +1 -1
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +384 -17
- data/lib/starter_web/_includes/_attributes.asciidoc +0 -575
- data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/comments-1080x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/cookie-consent-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/fab-1080x500.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/full-text-search-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/intro-panel-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/nav-module-1080x300.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/teaser-banner-1080x600.jpg +0 -0
- 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
|
+
}
|