j1-template 2022.5.0.rc1 → 2022.5.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (378) hide show
  1. checksums.yaml +4 -4
  2. data/assets/data/banner.html +24 -1
  3. data/assets/themes/j1/adapter/js/masterslider.js +22 -5
  4. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +56 -0
  5. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
  6. data/lib/j1/version.rb +1 -1
  7. data/lib/starter_web/Gemfile +270 -270
  8. data/lib/starter_web/_config.yml +19 -9
  9. data/lib/starter_web/_data/blocks/banner.yml +17 -0
  10. data/lib/starter_web/_data/modules/defaults/masterslider.yml +1 -1
  11. data/lib/starter_web/_data/modules/justifiedGallery.yml +82 -0
  12. data/lib/starter_web/_data/modules/masterslider.yml +5 -9
  13. data/lib/starter_web/_data/modules/navigator_menu.yml +208 -168
  14. data/lib/starter_web/_includes/attributes.asciidoc +18 -14
  15. data/lib/starter_web/_includes/tables/template_variables.asciidoc +1 -1
  16. data/lib/starter_web/_plugins/asciidoctor-extensions/lightbox-block.rb +4 -4
  17. data/lib/starter_web/assets/images/pages/features/blog-post-navigator-1280x1000.jpg +0 -0
  18. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.png +0 -0
  19. data/lib/starter_web/assets/images/pages/features/clipboard-1280x600.jpg +0 -0
  20. data/lib/starter_web/assets/images/pages/features/comments-1280x600.jpg +0 -0
  21. data/lib/starter_web/assets/images/pages/features/cookie-consent-1280x800.jpg +0 -0
  22. data/lib/starter_web/assets/images/pages/features/desktop-web-navigation-1280x1000.jpg +0 -0
  23. data/lib/starter_web/assets/images/pages/features/example-content-1280x800.jpg +0 -0
  24. data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1280x800.jpg +0 -0
  25. data/lib/starter_web/assets/images/pages/features/fab-1280x500.jpg +0 -0
  26. data/lib/starter_web/assets/images/pages/features/full-text-search-1280x800.jpg +0 -0
  27. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.png +0 -0
  28. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.png +0 -0
  29. data/lib/starter_web/assets/images/pages/features/intro-panel-1280x800.jpg +0 -0
  30. data/lib/starter_web/assets/images/pages/features/master-header-1280x600.jpg +0 -0
  31. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.png +0 -0
  32. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.png +0 -0
  33. data/lib/starter_web/assets/images/pages/features/nav-module-1280x300.jpg +0 -0
  34. data/lib/starter_web/assets/images/pages/features/nbi-barchart-1280x800.jpg +0 -0
  35. data/lib/starter_web/assets/images/pages/features/teaser-banner-1280x600.jpg +0 -0
  36. data/lib/starter_web/assets/images/pages/features/translator-1280x800.jpg +0 -0
  37. data/lib/starter_web/assets/images/sticker/600x600/sticker-new-version.png +0 -0
  38. data/lib/starter_web/assets/images/sticker/scalable/readme +0 -0
  39. data/lib/starter_web/package.json +6 -6
  40. data/lib/starter_web/pages/public/_jupyter/docs/_includes/attributes.asciidoc +67 -0
  41. data/lib/starter_web/pages/public/_jupyter/docs/_includes/documents/j1_docs_example_static.asciidoc +232 -0
  42. data/lib/starter_web/pages/public/_jupyter/docs/binderhub.adoc +631 -0
  43. data/lib/starter_web/pages/public/_jupyter/docs/j1-nbinteract.adoc +638 -0
  44. data/lib/starter_web/pages/public/_jupyter/docs/jupyterhub.adoc +248 -0
  45. data/lib/starter_web/pages/public/_jupyter/docs/nbinteract-widget-manual.adoc +928 -0
  46. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-circular-times-table.adoc +139 -0
  47. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-common-used-widgets.adoc +229 -0
  48. data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-odes-in-python.adoc +112 -0
  49. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-altair/j1-altair-visualisations.adoc +142 -0
  50. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bokeh-visualisations.adoc +171 -0
  51. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bqplot-eamples.adoc +111 -0
  52. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-plotly/j1-plotly-visualisations.adoc +94 -0
  53. data/lib/starter_web/pages/public/_jupyter/examples/localized/j1_climate-change-forecast.adoc +106 -0
  54. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16260 -0
  55. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_bgplot_line_plot-checkpoint.ipynb +247 -0
  56. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-Copy1-checkpoint.ipynb +12382 -0
  57. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-checkpoint.ipynb +12387 -0
  58. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-short-checkpoint.ipynb +12170 -0
  59. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_climate_change_forecast-checkpoint.ipynb +1058 -0
  60. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_docs_example_dynamic-checkpoint.ipynb +14478 -0
  61. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-Copy1-checkpoint.ipynb +379 -0
  62. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-checkpoint.ipynb +442 -0
  63. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets-checkpoint.ipynb +523 -0
  64. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.line_charts-checkpoint.ipynb +84 -0
  65. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.questions-checkpoint.ipynb +194 -0
  66. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_chart-checkpoint.ipynb +89 -0
  67. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-Copy1-checkpoint.ipynb +164 -0
  68. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-checkpoint.ipynb +173 -0
  69. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts.1-checkpoint.ipynb +256 -0
  70. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_barcharts-checkpoint.ipynb +126 -0
  71. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_hist_chart-checkpoint.ipynb +87 -0
  72. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_chart-checkpoint.ipynb +90 -0
  73. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_charts-checkpoint.ipynb +87 -0
  74. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_multiple_choice-checkpoint.ipynb +64 -0
  75. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_short_answer-checkpoint.ipynb +122 -0
  76. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_questions-checkpoint.ipynb +181 -0
  77. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_chart-checkpoint.ipynb +89 -0
  78. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_charts-checkpoint.ipynb +175 -0
  79. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_drag_chart-checkpoint.ipynb +87 -0
  80. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_ode_selected-checkpoint.ipynb +14478 -0
  81. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_odes_in_python-checkpoint.ipynb +15227 -0
  82. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/factor_by_factor.mp4 +0 -0
  83. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_circular_times_table.ipynb +12382 -0
  84. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_climate_change_forecast.ipynb +1058 -0
  85. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_docs_example_dynamic.ipynb +14478 -0
  86. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_interactive_widgets.ipynb +442 -0
  87. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets.ipynb +523 -0
  88. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_bar_chart.ipynb +89 -0
  89. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_hist_chart.ipynb +87 -0
  90. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_line_chart.ipynb +90 -0
  91. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_multiple_choice.ipynb +64 -0
  92. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_short_answer.ipynb +122 -0
  93. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_chart.ipynb +89 -0
  94. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_drag_chart.ipynb +87 -0
  95. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_odes_in_python.ipynb +15227 -0
  96. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/line_by_line.mp4 +0 -0
  97. data/lib/starter_web/pages/public/_jupyter/notebooks/j1/point_by_point.mp4 +0 -0
  98. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16296 -0
  99. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_non_interactive-checkpoint.ipynb +15385 -0
  100. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_interactive.ipynb +16296 -0
  101. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_non_interactive.ipynb +15385 -0
  102. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/00 - Introduction and Setup-checkpoint.ipynb +717 -0
  103. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/01 - Basic Plotting-checkpoint.ipynb +1381 -0
  104. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/02 - Styling and Theming-checkpoint.ipynb +1440 -0
  105. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/03 - Data Sources and Transformations-checkpoint.ipynb +927 -0
  106. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/04 - Adding Annotations-checkpoint.ipynb +1105 -0
  107. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/05 - Presentation Layouts-checkpoint.ipynb +578 -0
  108. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/06 - Linking and Interactions-checkpoint.ipynb +1196 -0
  109. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/07 - Bar and Categorical Data Plots-checkpoint.ipynb +1681 -0
  110. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/08 - Graph and Network Plots-checkpoint.ipynb +680 -0
  111. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/09 - Geographic Plots-checkpoint.ipynb +693 -0
  112. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/10 - Exporting and Embedding-checkpoint.ipynb +751 -0
  113. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/11 - Running Bokeh Applications-checkpoint.ipynb +770 -0
  114. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/bokeh_tut_00_introduction_and_setup-checkpoint.ipynb +666 -0
  115. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_01_basic_plotting-checkpoint.ipynb +1365 -0
  116. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_02_styling_and_theming-checkpoint.ipynb +1405 -0
  117. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_03_data_sources_and_transformations-checkpoint.ipynb +856 -0
  118. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_04_adding_annotations-checkpoint.ipynb +1167 -0
  119. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_05_presentation_layouts-checkpoint.ipynb +601 -0
  120. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_06_linking_and_interactions-checkpoint.ipynb +1356 -0
  121. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_07_bar_and_categorical_data_plots-checkpoint.ipynb +1742 -0
  122. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_08_graph_and_network_plots-checkpoint.ipynb +625 -0
  123. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_09_geographic_plots-checkpoint.ipynb +685 -0
  124. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.ipynb +726 -0
  125. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.org +726 -0
  126. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding.new-checkpoint.ipynb +560 -0
  127. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_11_running_bokeh_applications-checkpoint.ipynb +716 -0
  128. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_01_basic_plotting.ipynb +1365 -0
  129. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_02_styling_and_theming.ipynb +1405 -0
  130. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_03_data_sources_and_transformations.ipynb +856 -0
  131. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_04_adding_annotations.ipynb +1167 -0
  132. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_05_presentation_layouts.ipynb +601 -0
  133. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_06_linking_and_interactions.ipynb +1356 -0
  134. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_07_bar_and_categorical_data_plots.ipynb +1742 -0
  135. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_08_graph_and_network_plots.ipynb +625 -0
  136. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_09_geographic_plots.ipynb +685 -0
  137. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/.ipynb_checkpoints/j1_mathplot_vs_bqplot-checkpoint.ipynb +336 -0
  138. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/advanced/Feature_Vector_Distribution-Iris-Digits.ipynb +433 -0
  139. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_bgplot_line_plot.ipynb +244 -0
  140. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_circular_times_table-short.ipynb +12170 -0
  141. data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_mathplot_vs_bqplot.ipynb +336 -0
  142. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Index-checkpoint.ipynb +163 -0
  143. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Tutorials-checkpoint.ipynb +51 -0
  144. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Advanced Plotting.ipynb +289 -0
  145. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Animations.ipynb +266 -0
  146. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Axis Properties.ipynb +396 -0
  147. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Plotting Dates.ipynb +318 -0
  148. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/Time Series.ipynb +158 -0
  149. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/spx_prices.csv +6799 -0
  150. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb +470 -0
  151. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Index.ipynb +49 -0
  152. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Logs Analytics/Logs Dashboard.ipynb +378 -0
  153. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Mobile Patent Suits.ipynb +123 -0
  154. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Neural Network.ipynb +177 -0
  155. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Outlier Detection.ipynb +311 -0
  156. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Bubble Chart.ipynb +255 -0
  157. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Choropleth.ipynb +275 -0
  158. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/nations.json +1 -0
  159. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/world_map_codes.csv +234 -0
  160. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Basic Plotting-checkpoint.ipynb +186 -0
  161. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Pyplot-checkpoint.ipynb +794 -0
  162. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Untitled-checkpoint.ipynb +323 -0
  163. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Basic Plotting.ipynb +261 -0
  164. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Pyplot.ipynb +1489 -0
  165. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Index.ipynb +163 -0
  166. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Interaction Layer.ipynb +966 -0
  167. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Mark Interactions.ipynb +476 -0
  168. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Selectors.ipynb +427 -0
  169. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Introduction.ipynb +528 -0
  170. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bars.ipynb +480 -0
  171. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bins.ipynb +217 -0
  172. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Boxplot.ipynb +253 -0
  173. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Candles.ipynb +225 -0
  174. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/FlexLine.ipynb +123 -0
  175. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Graph.ipynb +357 -0
  176. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/GridHeatMap.ipynb +422 -0
  177. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/HeatMap.ipynb +157 -0
  178. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Hist.ipynb +176 -0
  179. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Image.ipynb +195 -0
  180. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Label.ipynb +189 -0
  181. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Lines.ipynb +565 -0
  182. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Map.ipynb +182 -0
  183. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Market Map.ipynb +315 -0
  184. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Pie.ipynb +465 -0
  185. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Scatter.ipynb +835 -0
  186. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bars.ipynb +362 -0
  187. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bins.ipynb +252 -0
  188. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Boxplot.ipynb +273 -0
  189. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Candles.ipynb +242 -0
  190. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/GridHeatMap.ipynb +417 -0
  191. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/HeatMap.ipynb +155 -0
  192. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Hist.ipynb +238 -0
  193. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Image.ipynb +152 -0
  194. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Label.ipynb +206 -0
  195. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Lines.ipynb +474 -0
  196. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Map.ipynb +181 -0
  197. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Pie.ipynb +310 -0
  198. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Scatter.ipynb +702 -0
  199. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Scales/Color Scales.ipynb +495 -0
  200. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Feature_Vector_Distribution-Iris-Digits-checkpoint.ipynb +433 -0
  201. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Linking Plots With Widgets-checkpoint.ipynb +326 -0
  202. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-Copy1-checkpoint.ipynb +177 -0
  203. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-checkpoint.ipynb +177 -0
  204. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Brush Interval Selector.ipynb +154 -0
  205. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Fast Interval Selector.ipynb +152 -0
  206. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density Widget.ipynb +128 -0
  207. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density.ipynb +113 -0
  208. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Linking Plots With Widgets.ipynb +326 -0
  209. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Object Model.ipynb +179 -0
  210. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Pyplot.ipynb +174 -0
  211. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Updating Plots.ipynb +177 -0
  212. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials.ipynb +51 -0
  213. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/country_codes.csv +213 -0
  214. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/gdp_per_capita.csv +56 -0
  215. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/state_codes.csv +52 -0
  216. data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/trees.jpg +0 -0
  217. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_central_limit_theorem-checkpoint.ipynb +247 -0
  218. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_variability_of_the_sample_mean-checkpoint.ipynb +323 -0
  219. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_graphing-checkpoint.ipynb +387 -0
  220. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_interactive_questions-checkpoint.ipynb +185 -0
  221. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_layout-checkpoint.ipynb +384 -0
  222. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_interact-checkpoint.ipynb +254 -0
  223. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_monty_hall-checkpoint.ipynb +732 -0
  224. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_central_limit_theorem.ipynb +247 -0
  225. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_correlation.ipynb +651 -0
  226. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_empirical_distributions.ipynb +773 -0
  227. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_linear_regression.ipynb +111 -0
  228. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_probability_distribution_plots.ipynb +199 -0
  229. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_sampling_from_a_population.ipynb +421 -0
  230. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_variability_of_the_sample_mean.ipynb +323 -0
  231. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_graphing.ipynb +387 -0
  232. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_interactive_questions.ipynb +185 -0
  233. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_layout.ipynb +384 -0
  234. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_interact.ipynb +254 -0
  235. data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_monty_hall.ipynb +732 -0
  236. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Advanced Plotting.html +373 -0
  237. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Animations.html +361 -0
  238. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Axis Properties.html +569 -0
  239. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bars.html +487 -0
  240. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Basic Plotting.html +341 -0
  241. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bins.html +259 -0
  242. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Boxplot.html +277 -0
  243. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Brush Interval Selector.html +182 -0
  244. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bubble Chart.html +299 -0
  245. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Candles.html +252 -0
  246. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Choropleth.html +318 -0
  247. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Color Scales.html +514 -0
  248. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Fast Interval Selector.html +182 -0
  249. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Feature_Vector_Distribution-Iris-Digits.html +479 -0
  250. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/FlexLine.html +128 -0
  251. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density Widget.html +152 -0
  252. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density.html +137 -0
  253. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Graph.html +484 -0
  254. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/GridHeatMap.html +483 -0
  255. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/HeatMap.html +170 -0
  256. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Hist.html +349 -0
  257. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Image.html +177 -0
  258. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Index.html +29 -0
  259. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Interaction Layer.html +1372 -0
  260. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Introduction.html +749 -0
  261. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Label.html +268 -0
  262. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Lines.html +704 -0
  263. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Linking Plots With Widgets.html +389 -0
  264. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Logs Dashboard.html +455 -0
  265. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Map.html +229 -0
  266. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mark Interactions.html +613 -0
  267. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Market Map.html +413 -0
  268. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mobile Patent Suits.html +131 -0
  269. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Neural Network.html +190 -0
  270. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Object Model.html +193 -0
  271. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Outlier Detection.html +363 -0
  272. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pie.html +367 -0
  273. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Plotting Dates.html +337 -0
  274. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pyplot.html +196 -0
  275. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Scatter.html +948 -0
  276. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Selectors.html +489 -0
  277. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Time Series.html +173 -0
  278. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Tutorials.html +40 -0
  279. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Updating Plots.html +228 -0
  280. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_interactive.html +2216 -0
  281. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_non_interactive.html +1170 -0
  282. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bgplot_line_plot.html +318 -0
  283. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_01_basic_plotting.html +1479 -0
  284. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_02_styling_and_theming.html +1524 -0
  285. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_03_data_sources_and_transformations.html +983 -0
  286. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_04_adding_annotations.html +1280 -0
  287. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_05_presentation_layouts.html +660 -0
  288. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_06_linking_and_interactions.html +1563 -0
  289. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_07_bar_and_categorical_data_plots.html +1888 -0
  290. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_08_graph_and_network_plots.html +689 -0
  291. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_09_geographic_plots.html +767 -0
  292. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table-short.html +475 -0
  293. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table.html +747 -0
  294. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_climate_change_forecast.html +1250 -0
  295. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_docs_example_dynamic.html +186 -0
  296. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -0
  297. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_mathplot_vs_bqplot.html +407 -0
  298. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -0
  299. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -0
  300. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -0
  301. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -0
  302. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -0
  303. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -0
  304. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -0
  305. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -0
  306. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -0
  307. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_central_limit_theorem.html +290 -0
  308. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_correlation.html +818 -0
  309. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_empirical_distributions.html +351 -0
  310. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_linear_regression.html +106 -0
  311. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_probability_distribution_plots.html +228 -0
  312. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_sampling_from_a_population.html +518 -0
  313. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_variability_of_the_sample_mean.html +372 -0
  314. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_graphing.html +473 -0
  315. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_interactive_questions.html +242 -0
  316. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_layout.html +496 -0
  317. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_interact.html +329 -0
  318. data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_monty_hall.html +866 -0
  319. data/lib/starter_web/pages/public/_jupyter/where_to_go.adoc +270 -0
  320. data/lib/starter_web/pages/public/features/general.adoc +74 -33
  321. data/lib/starter_web/pages/public/features/template.adoc +159 -68
  322. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -512
  323. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -629
  324. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -95
  325. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -93
  326. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -96
  327. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -70
  328. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -156
  329. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -95
  330. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -93
  331. data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -955
  332. data/lib/starter_web/pages/public/learn/_roundtrip/100_present_images.adoc +313 -0
  333. data/lib/starter_web/pages/public/learn/_roundtrip/100_present_videos.adoc +281 -0
  334. data/lib/starter_web/pages/public/learn/_roundtrip/200_typography.adoc +253 -0
  335. data/lib/starter_web/pages/public/learn/_roundtrip/300_icon_fonts.adoc +579 -0
  336. data/lib/starter_web/pages/public/learn/_roundtrip/400_asciidoc_extensions.adoc +718 -0
  337. data/lib/starter_web/pages/public/learn/_roundtrip/410_bs_modals_extentions.adoc +91 -0
  338. data/lib/starter_web/pages/public/learn/_roundtrip/420_responsive_tables_extensions.adoc +420 -0
  339. data/lib/starter_web/pages/public/learn/_roundtrip/500_themes.adoc +250 -0
  340. data/lib/starter_web/pages/public/learn/_roundtrip/600_quicksearch.adoc +425 -0
  341. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/attributes.asciidoc +118 -0
  342. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/100_gistblock.asciidoc +28 -0
  343. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_info.asciidoc +14 -0
  344. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +11 -0
  345. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +11 -0
  346. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_central_success.asciidoc +11 -0
  347. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_left_info.asciidoc +11 -0
  348. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_right_success.asciidoc +11 -0
  349. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +47 -0
  350. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_info.asciidoc +11 -0
  351. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_left_info.asciidoc +11 -0
  352. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_right_success.asciidoc +11 -0
  353. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +337 -0
  354. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +47 -0
  355. data/lib/starter_web/pages/public/learn/_roundtrip/_includes/google-ad.js +130 -0
  356. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +6 -5
  357. data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +1 -2
  358. data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +4 -2
  359. data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +1 -1
  360. data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +1 -1
  361. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  362. data/lib/starter_web/utilsrv/package.json +1 -1
  363. metadata +384 -17
  364. data/lib/starter_web/_includes/_attributes.asciidoc +0 -575
  365. data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1080x800.jpg +0 -0
  366. data/lib/starter_web/assets/images/pages/features/comments-1080x600.jpg +0 -0
  367. data/lib/starter_web/assets/images/pages/features/cookie-consent-1080x800.jpg +0 -0
  368. data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1080x800.jpg +0 -0
  369. data/lib/starter_web/assets/images/pages/features/fab-1080x500.jpg +0 -0
  370. data/lib/starter_web/assets/images/pages/features/full-text-search-1080x800.jpg +0 -0
  371. data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
  372. data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
  373. data/lib/starter_web/assets/images/pages/features/intro-panel-1080x800.jpg +0 -0
  374. data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
  375. data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
  376. data/lib/starter_web/assets/images/pages/features/nav-module-1080x300.jpg +0 -0
  377. data/lib/starter_web/assets/images/pages/features/teaser-banner-1080x600.jpg +0 -0
  378. data/lib/starter_web/assets/images/pages/features/translator-1080x800.jpg +0 -0
@@ -0,0 +1,1170 @@
1
+ <div class="cell text_cell">
2
+ <button class="js-nbinteract-widget">
3
+ Loading widgets...
4
+ </button>
5
+ </div>
6
+
7
+
8
+
9
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
10
+ <div class="text_cell_render border-box-sizing rendered_html">
11
+ <h3 id="Resources">Resources<a class="anchor-link" href="#Resources">&#182;</a></h3>
12
+ </div>
13
+ </div>
14
+ </div>
15
+
16
+
17
+
18
+ <div class="
19
+ cell border-box-sizing code_cell rendered">
20
+ <div class="input">
21
+
22
+ <div class="inner_cell">
23
+ <div class="input_area">
24
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">warnings</span>
25
+ <span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span>
26
+
27
+ <span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
28
+ <span class="kn">import</span> <span class="nn">altair</span> <span class="k">as</span> <span class="nn">alt</span>
29
+ </pre></div>
30
+
31
+ </div>
32
+ </div>
33
+ </div>
34
+
35
+ </div>
36
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
37
+ <div class="text_cell_render border-box-sizing rendered_html">
38
+ <h3 id="The-Movies-Dataset">The Movies Dataset<a class="anchor-link" href="#The-Movies-Dataset">&#182;</a></h3><p>We will be working with a table of data about motion pictures, taken from the vega-datasets collection. The data includes variables such as the film name, director, genre, release date, ratings, and gross revenues. However, be careful when working with this data: the films are from unevenly sampled years, using data combined from multiple sources. If you dig in you will find issues with missing values and even some subtle errors! Nevertheless, the data should prove interesting to explore...</p>
39
+ <p>Let's retrieve the URL for the JSON data file from the vega_datasets package, and then read the data into a Pandas data frame so that we can inspect its contents.</p>
40
+
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+
46
+
47
+ <div class="
48
+ cell border-box-sizing code_cell rendered">
49
+ <div class="input">
50
+
51
+ <div class="inner_cell">
52
+ <div class="input_area">
53
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">movies_url</span> <span class="o">=</span> <span class="s1">&#39;https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json&#39;</span>
54
+ <span class="n">movies</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_json</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span>
55
+ </pre></div>
56
+
57
+ </div>
58
+ </div>
59
+ </div>
60
+
61
+ </div>
62
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
63
+ <div class="text_cell_render border-box-sizing rendered_html">
64
+ <p>Now let's peek at the first 5 rows of the table to get a sense of the fields and data types...</p>
65
+
66
+ </div>
67
+ </div>
68
+ </div>
69
+
70
+
71
+
72
+ <div class="
73
+ cell border-box-sizing code_cell rendered">
74
+ <div class="input">
75
+
76
+ <div class="inner_cell">
77
+ <div class="input_area">
78
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">movies</span><span class="o">.</span><span class="n">head</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
79
+ </pre></div>
80
+
81
+ </div>
82
+ </div>
83
+ </div>
84
+
85
+ <div class="output_wrapper">
86
+ <div class="output">
87
+
88
+
89
+ <div class="output_area">
90
+
91
+
92
+
93
+
94
+ <div class="output_html rendered_html output_subarea output_execute_result">
95
+ <div>
96
+ <style scoped>
97
+ .dataframe tbody tr th:only-of-type {
98
+ vertical-align: middle;
99
+ }
100
+
101
+ .dataframe tbody tr th {
102
+ vertical-align: top;
103
+ }
104
+
105
+ .dataframe thead th {
106
+ text-align: right;
107
+ }
108
+ </style>
109
+ <table border="1" class="dataframe">
110
+ <thead>
111
+ <tr style="text-align: right;">
112
+ <th></th>
113
+ <th>Title</th>
114
+ <th>US_Gross</th>
115
+ <th>Worldwide_Gross</th>
116
+ <th>US_DVD_Sales</th>
117
+ <th>Production_Budget</th>
118
+ <th>Release_Date</th>
119
+ <th>MPAA_Rating</th>
120
+ <th>Running_Time_min</th>
121
+ <th>Distributor</th>
122
+ <th>Source</th>
123
+ <th>Major_Genre</th>
124
+ <th>Creative_Type</th>
125
+ <th>Director</th>
126
+ <th>Rotten_Tomatoes_Rating</th>
127
+ <th>IMDB_Rating</th>
128
+ <th>IMDB_Votes</th>
129
+ </tr>
130
+ </thead>
131
+ <tbody>
132
+ <tr>
133
+ <th>0</th>
134
+ <td>The Land Girls</td>
135
+ <td>146083.0</td>
136
+ <td>146083.0</td>
137
+ <td>NaN</td>
138
+ <td>8000000.0</td>
139
+ <td>Jun 12 1998</td>
140
+ <td>R</td>
141
+ <td>NaN</td>
142
+ <td>Gramercy</td>
143
+ <td>None</td>
144
+ <td>None</td>
145
+ <td>None</td>
146
+ <td>None</td>
147
+ <td>NaN</td>
148
+ <td>6.1</td>
149
+ <td>1071.0</td>
150
+ </tr>
151
+ <tr>
152
+ <th>1</th>
153
+ <td>First Love, Last Rites</td>
154
+ <td>10876.0</td>
155
+ <td>10876.0</td>
156
+ <td>NaN</td>
157
+ <td>300000.0</td>
158
+ <td>Aug 07 1998</td>
159
+ <td>R</td>
160
+ <td>NaN</td>
161
+ <td>Strand</td>
162
+ <td>None</td>
163
+ <td>Drama</td>
164
+ <td>None</td>
165
+ <td>None</td>
166
+ <td>NaN</td>
167
+ <td>6.9</td>
168
+ <td>207.0</td>
169
+ </tr>
170
+ <tr>
171
+ <th>2</th>
172
+ <td>I Married a Strange Person</td>
173
+ <td>203134.0</td>
174
+ <td>203134.0</td>
175
+ <td>NaN</td>
176
+ <td>250000.0</td>
177
+ <td>Aug 28 1998</td>
178
+ <td>None</td>
179
+ <td>NaN</td>
180
+ <td>Lionsgate</td>
181
+ <td>None</td>
182
+ <td>Comedy</td>
183
+ <td>None</td>
184
+ <td>None</td>
185
+ <td>NaN</td>
186
+ <td>6.8</td>
187
+ <td>865.0</td>
188
+ </tr>
189
+ <tr>
190
+ <th>3</th>
191
+ <td>Let's Talk About Sex</td>
192
+ <td>373615.0</td>
193
+ <td>373615.0</td>
194
+ <td>NaN</td>
195
+ <td>300000.0</td>
196
+ <td>Sep 11 1998</td>
197
+ <td>None</td>
198
+ <td>NaN</td>
199
+ <td>Fine Line</td>
200
+ <td>None</td>
201
+ <td>Comedy</td>
202
+ <td>None</td>
203
+ <td>None</td>
204
+ <td>13.0</td>
205
+ <td>NaN</td>
206
+ <td>NaN</td>
207
+ </tr>
208
+ <tr>
209
+ <th>4</th>
210
+ <td>Slam</td>
211
+ <td>1009819.0</td>
212
+ <td>1087521.0</td>
213
+ <td>NaN</td>
214
+ <td>1000000.0</td>
215
+ <td>Oct 09 1998</td>
216
+ <td>R</td>
217
+ <td>NaN</td>
218
+ <td>Trimark</td>
219
+ <td>Original Screenplay</td>
220
+ <td>Drama</td>
221
+ <td>Contemporary Fiction</td>
222
+ <td>None</td>
223
+ <td>62.0</td>
224
+ <td>3.4</td>
225
+ <td>165.0</td>
226
+ </tr>
227
+ </tbody>
228
+ </table>
229
+ </div>
230
+ </div>
231
+
232
+ </div>
233
+
234
+ </div>
235
+ </div>
236
+
237
+ </div>
238
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
239
+ <div class="text_cell_render border-box-sizing rendered_html">
240
+ <h3 id="Histograms">Histograms<a class="anchor-link" href="#Histograms">&#182;</a></h3><p>We'll start our transformation tour by binning data into discrete groups and counting records to summarize those groups. The resulting plots are known as histograms.</p>
241
+ <p>Let's first look at unaggregated data: a scatter plot showing movie ratings from Rotten Tomatoes versus ratings from IMDB users. We'll provide data to Altair by passing the movies data URL to the Chart method. (We could also pass the Pandas data frame directly to get the same result.) We can then encode the Rotten Tomatoes and IMDB ratings fields using the x and y channels:</p>
242
+
243
+ </div>
244
+ </div>
245
+ </div>
246
+
247
+
248
+
249
+ <div class="
250
+ cell border-box-sizing code_cell rendered">
251
+ <div class="input">
252
+
253
+ <div class="inner_cell">
254
+ <div class="input_area">
255
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_circle</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
256
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">),</span>
257
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;IMDB_Rating:Q&#39;</span><span class="p">)</span>
258
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
259
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
260
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
261
+ <span class="p">)</span>
262
+ </pre></div>
263
+
264
+ </div>
265
+ </div>
266
+ </div>
267
+
268
+ <div class="output_wrapper">
269
+ <div class="output">
270
+
271
+
272
+ <div class="output_area">
273
+
274
+
275
+
276
+
277
+ <div class="output_html rendered_html output_subarea output_execute_result">
278
+
279
+ <div id="altair-viz-3fb77a8addc44bdbba64608b1b36043f"></div>
280
+ <script type="text/javascript">
281
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
282
+ (function(spec, embedOpt){
283
+ let outputDiv = document.currentScript.previousElementSibling;
284
+ if (outputDiv.id !== "altair-viz-3fb77a8addc44bdbba64608b1b36043f") {
285
+ outputDiv = document.getElementById("altair-viz-3fb77a8addc44bdbba64608b1b36043f");
286
+ }
287
+ const paths = {
288
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
289
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
290
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
291
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
292
+ };
293
+
294
+ function maybeLoadScript(lib, version) {
295
+ var key = `${lib.replace("-", "")}_version`;
296
+ return (VEGA_DEBUG[key] == version) ?
297
+ Promise.resolve(paths[lib]) :
298
+ new Promise(function(resolve, reject) {
299
+ var s = document.createElement('script');
300
+ document.getElementsByTagName("head")[0].appendChild(s);
301
+ s.async = true;
302
+ s.onload = () => {
303
+ VEGA_DEBUG[key] = version;
304
+ return resolve(paths[lib]);
305
+ };
306
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
307
+ s.src = paths[lib];
308
+ });
309
+ }
310
+
311
+ function showError(err) {
312
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
313
+ throw err;
314
+ }
315
+
316
+ function displayChart(vegaEmbed) {
317
+ vegaEmbed(outputDiv, spec, embedOpt)
318
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
319
+ }
320
+
321
+ if(typeof define === "function" && define.amd) {
322
+ requirejs.config({paths});
323
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
324
+ } else {
325
+ maybeLoadScript("vega", "5")
326
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
327
+ .then(() => maybeLoadScript("vega-embed", "6"))
328
+ .catch(showError)
329
+ .then(() => displayChart(vegaEmbed));
330
+ }
331
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "circle", "encoding": {"x": {"field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"field": "IMDB_Rating", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
332
+ </script>
333
+ </div>
334
+
335
+ </div>
336
+
337
+ </div>
338
+ </div>
339
+
340
+ </div>
341
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
342
+ <div class="text_cell_render border-box-sizing rendered_html">
343
+ <p>To summarize this data, we can bin a data field to group numeric values into discrete groups. Here we bin along the x-axis by adding bin=True to the x encoding channel. The result is a set of ten bins of equal step size, each corresponding to a span of ten ratings points.</p>
344
+
345
+ </div>
346
+ </div>
347
+ </div>
348
+
349
+
350
+
351
+ <div class="
352
+ cell border-box-sizing code_cell rendered">
353
+ <div class="input">
354
+
355
+ <div class="inner_cell">
356
+ <div class="input_area">
357
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_circle</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
358
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
359
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;IMDB_Rating:Q&#39;</span><span class="p">)</span>
360
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
361
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
362
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
363
+ <span class="p">)</span>
364
+ </pre></div>
365
+
366
+ </div>
367
+ </div>
368
+ </div>
369
+
370
+ <div class="output_wrapper">
371
+ <div class="output">
372
+
373
+
374
+ <div class="output_area">
375
+
376
+
377
+
378
+
379
+ <div class="output_html rendered_html output_subarea output_execute_result">
380
+
381
+ <div id="altair-viz-d343c0fee35d45f097c050e5ec7a6ced"></div>
382
+ <script type="text/javascript">
383
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
384
+ (function(spec, embedOpt){
385
+ let outputDiv = document.currentScript.previousElementSibling;
386
+ if (outputDiv.id !== "altair-viz-d343c0fee35d45f097c050e5ec7a6ced") {
387
+ outputDiv = document.getElementById("altair-viz-d343c0fee35d45f097c050e5ec7a6ced");
388
+ }
389
+ const paths = {
390
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
391
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
392
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
393
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
394
+ };
395
+
396
+ function maybeLoadScript(lib, version) {
397
+ var key = `${lib.replace("-", "")}_version`;
398
+ return (VEGA_DEBUG[key] == version) ?
399
+ Promise.resolve(paths[lib]) :
400
+ new Promise(function(resolve, reject) {
401
+ var s = document.createElement('script');
402
+ document.getElementsByTagName("head")[0].appendChild(s);
403
+ s.async = true;
404
+ s.onload = () => {
405
+ VEGA_DEBUG[key] = version;
406
+ return resolve(paths[lib]);
407
+ };
408
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
409
+ s.src = paths[lib];
410
+ });
411
+ }
412
+
413
+ function showError(err) {
414
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
415
+ throw err;
416
+ }
417
+
418
+ function displayChart(vegaEmbed) {
419
+ vegaEmbed(outputDiv, spec, embedOpt)
420
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
421
+ }
422
+
423
+ if(typeof define === "function" && define.amd) {
424
+ requirejs.config({paths});
425
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
426
+ } else {
427
+ maybeLoadScript("vega", "5")
428
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
429
+ .then(() => maybeLoadScript("vega-embed", "6"))
430
+ .catch(showError)
431
+ .then(() => displayChart(vegaEmbed));
432
+ }
433
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "circle", "encoding": {"x": {"bin": true, "field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"field": "IMDB_Rating", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
434
+ </script>
435
+ </div>
436
+
437
+ </div>
438
+
439
+ </div>
440
+ </div>
441
+
442
+ </div>
443
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
444
+ <div class="text_cell_render border-box-sizing rendered_html">
445
+ <p>Setting bin=True uses default binning settings, but we can exercise more control if desired. Let's instead set the maximum bin count (maxbins) to 20, which has the effect of doubling the number of bins. Now each bin corresponds to a span of five ratings points.</p>
446
+
447
+ </div>
448
+ </div>
449
+ </div>
450
+
451
+
452
+
453
+ <div class="
454
+ cell border-box-sizing code_cell rendered">
455
+ <div class="input">
456
+
457
+ <div class="inner_cell">
458
+ <div class="input_area">
459
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_circle</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
460
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
461
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;IMDB_Rating:Q&#39;</span><span class="p">)</span>
462
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
463
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
464
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
465
+ <span class="p">)</span>
466
+ </pre></div>
467
+
468
+ </div>
469
+ </div>
470
+ </div>
471
+
472
+ <div class="output_wrapper">
473
+ <div class="output">
474
+
475
+
476
+ <div class="output_area">
477
+
478
+
479
+
480
+
481
+ <div class="output_html rendered_html output_subarea output_execute_result">
482
+
483
+ <div id="altair-viz-b1e8c23da933405c8dbfa3441caaab02"></div>
484
+ <script type="text/javascript">
485
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
486
+ (function(spec, embedOpt){
487
+ let outputDiv = document.currentScript.previousElementSibling;
488
+ if (outputDiv.id !== "altair-viz-b1e8c23da933405c8dbfa3441caaab02") {
489
+ outputDiv = document.getElementById("altair-viz-b1e8c23da933405c8dbfa3441caaab02");
490
+ }
491
+ const paths = {
492
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
493
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
494
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
495
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
496
+ };
497
+
498
+ function maybeLoadScript(lib, version) {
499
+ var key = `${lib.replace("-", "")}_version`;
500
+ return (VEGA_DEBUG[key] == version) ?
501
+ Promise.resolve(paths[lib]) :
502
+ new Promise(function(resolve, reject) {
503
+ var s = document.createElement('script');
504
+ document.getElementsByTagName("head")[0].appendChild(s);
505
+ s.async = true;
506
+ s.onload = () => {
507
+ VEGA_DEBUG[key] = version;
508
+ return resolve(paths[lib]);
509
+ };
510
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
511
+ s.src = paths[lib];
512
+ });
513
+ }
514
+
515
+ function showError(err) {
516
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
517
+ throw err;
518
+ }
519
+
520
+ function displayChart(vegaEmbed) {
521
+ vegaEmbed(outputDiv, spec, embedOpt)
522
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
523
+ }
524
+
525
+ if(typeof define === "function" && define.amd) {
526
+ requirejs.config({paths});
527
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
528
+ } else {
529
+ maybeLoadScript("vega", "5")
530
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
531
+ .then(() => maybeLoadScript("vega-embed", "6"))
532
+ .catch(showError)
533
+ .then(() => displayChart(vegaEmbed));
534
+ }
535
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "circle", "encoding": {"x": {"bin": {"maxbins": 20}, "field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"field": "IMDB_Rating", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
536
+ </script>
537
+ </div>
538
+
539
+ </div>
540
+
541
+ </div>
542
+ </div>
543
+
544
+ </div>
545
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
546
+ <div class="text_cell_render border-box-sizing rendered_html">
547
+ <p>With the data binned, let's now summarize the distribution of Rotten Tomatoes ratings. We will drop the IMDB ratings for now and instead use the y encoding channel to show an aggregate count of records, so that the vertical position of each point indicates the number of movies per Rotten Tomatoes rating bin.</p>
548
+ <p>As the count aggregate counts the number of total records in each bin regardless of the field values, we do not need to include a field name in the y encoding.</p>
549
+
550
+ </div>
551
+ </div>
552
+ </div>
553
+
554
+
555
+
556
+ <div class="
557
+ cell border-box-sizing code_cell rendered">
558
+ <div class="input">
559
+
560
+ <div class="inner_cell">
561
+ <div class="input_area">
562
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_circle</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
563
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
564
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;count()&#39;</span><span class="p">)</span>
565
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
566
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
567
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
568
+ <span class="p">)</span>
569
+ </pre></div>
570
+
571
+ </div>
572
+ </div>
573
+ </div>
574
+
575
+ <div class="output_wrapper">
576
+ <div class="output">
577
+
578
+
579
+ <div class="output_area">
580
+
581
+
582
+
583
+
584
+ <div class="output_html rendered_html output_subarea output_execute_result">
585
+
586
+ <div id="altair-viz-e2a841b391c546048445e68b0c28f564"></div>
587
+ <script type="text/javascript">
588
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
589
+ (function(spec, embedOpt){
590
+ let outputDiv = document.currentScript.previousElementSibling;
591
+ if (outputDiv.id !== "altair-viz-e2a841b391c546048445e68b0c28f564") {
592
+ outputDiv = document.getElementById("altair-viz-e2a841b391c546048445e68b0c28f564");
593
+ }
594
+ const paths = {
595
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
596
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
597
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
598
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
599
+ };
600
+
601
+ function maybeLoadScript(lib, version) {
602
+ var key = `${lib.replace("-", "")}_version`;
603
+ return (VEGA_DEBUG[key] == version) ?
604
+ Promise.resolve(paths[lib]) :
605
+ new Promise(function(resolve, reject) {
606
+ var s = document.createElement('script');
607
+ document.getElementsByTagName("head")[0].appendChild(s);
608
+ s.async = true;
609
+ s.onload = () => {
610
+ VEGA_DEBUG[key] = version;
611
+ return resolve(paths[lib]);
612
+ };
613
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
614
+ s.src = paths[lib];
615
+ });
616
+ }
617
+
618
+ function showError(err) {
619
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
620
+ throw err;
621
+ }
622
+
623
+ function displayChart(vegaEmbed) {
624
+ vegaEmbed(outputDiv, spec, embedOpt)
625
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
626
+ }
627
+
628
+ if(typeof define === "function" && define.amd) {
629
+ requirejs.config({paths});
630
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
631
+ } else {
632
+ maybeLoadScript("vega", "5")
633
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
634
+ .then(() => maybeLoadScript("vega-embed", "6"))
635
+ .catch(showError)
636
+ .then(() => displayChart(vegaEmbed));
637
+ }
638
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "circle", "encoding": {"x": {"bin": {"maxbins": 20}, "field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"aggregate": "count", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
639
+ </script>
640
+ </div>
641
+
642
+ </div>
643
+
644
+ </div>
645
+ </div>
646
+
647
+ </div>
648
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
649
+ <div class="text_cell_render border-box-sizing rendered_html">
650
+ <p>To arrive at a standard histogram, let's change the mark type from circle to bar:</p>
651
+
652
+ </div>
653
+ </div>
654
+ </div>
655
+
656
+
657
+
658
+ <div class="
659
+ cell border-box-sizing code_cell rendered">
660
+ <div class="input">
661
+
662
+ <div class="inner_cell">
663
+ <div class="input_area">
664
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_bar</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
665
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
666
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;count()&#39;</span><span class="p">)</span>
667
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
668
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
669
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
670
+ <span class="p">)</span>
671
+ </pre></div>
672
+
673
+ </div>
674
+ </div>
675
+ </div>
676
+
677
+ <div class="output_wrapper">
678
+ <div class="output">
679
+
680
+
681
+ <div class="output_area">
682
+
683
+
684
+
685
+
686
+ <div class="output_html rendered_html output_subarea output_execute_result">
687
+
688
+ <div id="altair-viz-890c699c81a343d785fabe95ccd77ce0"></div>
689
+ <script type="text/javascript">
690
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
691
+ (function(spec, embedOpt){
692
+ let outputDiv = document.currentScript.previousElementSibling;
693
+ if (outputDiv.id !== "altair-viz-890c699c81a343d785fabe95ccd77ce0") {
694
+ outputDiv = document.getElementById("altair-viz-890c699c81a343d785fabe95ccd77ce0");
695
+ }
696
+ const paths = {
697
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
698
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
699
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
700
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
701
+ };
702
+
703
+ function maybeLoadScript(lib, version) {
704
+ var key = `${lib.replace("-", "")}_version`;
705
+ return (VEGA_DEBUG[key] == version) ?
706
+ Promise.resolve(paths[lib]) :
707
+ new Promise(function(resolve, reject) {
708
+ var s = document.createElement('script');
709
+ document.getElementsByTagName("head")[0].appendChild(s);
710
+ s.async = true;
711
+ s.onload = () => {
712
+ VEGA_DEBUG[key] = version;
713
+ return resolve(paths[lib]);
714
+ };
715
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
716
+ s.src = paths[lib];
717
+ });
718
+ }
719
+
720
+ function showError(err) {
721
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
722
+ throw err;
723
+ }
724
+
725
+ function displayChart(vegaEmbed) {
726
+ vegaEmbed(outputDiv, spec, embedOpt)
727
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
728
+ }
729
+
730
+ if(typeof define === "function" && define.amd) {
731
+ requirejs.config({paths});
732
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
733
+ } else {
734
+ maybeLoadScript("vega", "5")
735
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
736
+ .then(() => maybeLoadScript("vega-embed", "6"))
737
+ .catch(showError)
738
+ .then(() => displayChart(vegaEmbed));
739
+ }
740
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "bar", "encoding": {"x": {"bin": {"maxbins": 20}, "field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"aggregate": "count", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
741
+ </script>
742
+ </div>
743
+
744
+ </div>
745
+
746
+ </div>
747
+ </div>
748
+
749
+ </div>
750
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
751
+ <div class="text_cell_render border-box-sizing rendered_html">
752
+ <p>We can now examine the distribution of ratings more clearly: we can see fewer movies on the negative end, and a bit more movies on the high end, but a generally uniform distribution overall. Rotten Tomatoes ratings are determined by taking "thumbs up" and "thumbs down" judgments from film critics and calculating the percentage of positive reviews. It appears this approach does a good job of utilizing the full range of rating values.</p>
753
+ <p>Similarly, we can create a histogram for IMDB ratings by changing the field in the x encoding channel:</p>
754
+
755
+ </div>
756
+ </div>
757
+ </div>
758
+
759
+
760
+
761
+ <div class="
762
+ cell border-box-sizing code_cell rendered">
763
+ <div class="input">
764
+
765
+ <div class="inner_cell">
766
+ <div class="input_area">
767
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_bar</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
768
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;IMDB_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
769
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;count()&#39;</span><span class="p">)</span>
770
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
771
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
772
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
773
+ <span class="p">)</span>
774
+ </pre></div>
775
+
776
+ </div>
777
+ </div>
778
+ </div>
779
+
780
+ <div class="output_wrapper">
781
+ <div class="output">
782
+
783
+
784
+ <div class="output_area">
785
+
786
+
787
+
788
+
789
+ <div class="output_html rendered_html output_subarea output_execute_result">
790
+
791
+ <div id="altair-viz-cee3059547d64f86bb7caf3d38da555c"></div>
792
+ <script type="text/javascript">
793
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
794
+ (function(spec, embedOpt){
795
+ let outputDiv = document.currentScript.previousElementSibling;
796
+ if (outputDiv.id !== "altair-viz-cee3059547d64f86bb7caf3d38da555c") {
797
+ outputDiv = document.getElementById("altair-viz-cee3059547d64f86bb7caf3d38da555c");
798
+ }
799
+ const paths = {
800
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
801
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
802
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
803
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
804
+ };
805
+
806
+ function maybeLoadScript(lib, version) {
807
+ var key = `${lib.replace("-", "")}_version`;
808
+ return (VEGA_DEBUG[key] == version) ?
809
+ Promise.resolve(paths[lib]) :
810
+ new Promise(function(resolve, reject) {
811
+ var s = document.createElement('script');
812
+ document.getElementsByTagName("head")[0].appendChild(s);
813
+ s.async = true;
814
+ s.onload = () => {
815
+ VEGA_DEBUG[key] = version;
816
+ return resolve(paths[lib]);
817
+ };
818
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
819
+ s.src = paths[lib];
820
+ });
821
+ }
822
+
823
+ function showError(err) {
824
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
825
+ throw err;
826
+ }
827
+
828
+ function displayChart(vegaEmbed) {
829
+ vegaEmbed(outputDiv, spec, embedOpt)
830
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
831
+ }
832
+
833
+ if(typeof define === "function" && define.amd) {
834
+ requirejs.config({paths});
835
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
836
+ } else {
837
+ maybeLoadScript("vega", "5")
838
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
839
+ .then(() => maybeLoadScript("vega-embed", "6"))
840
+ .catch(showError)
841
+ .then(() => displayChart(vegaEmbed));
842
+ }
843
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "bar", "encoding": {"x": {"bin": {"maxbins": 20}, "field": "IMDB_Rating", "type": "quantitative"}, "y": {"aggregate": "count", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
844
+ </script>
845
+ </div>
846
+
847
+ </div>
848
+
849
+ </div>
850
+ </div>
851
+
852
+ </div>
853
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
854
+ <div class="text_cell_render border-box-sizing rendered_html">
855
+ <p>In contrast to the more uniform distribution we saw before, IMDB ratings exhibit a bell-shaped (though negatively skewed) distribution. IMDB ratings are formed by averaging scores (ranging from 1 to 10) provided by the site's users. We can see that this form of measurement leads to a different shape than the Rotten Tomatoes ratings. We can also see that the mode of the distribution is between 6.5 and 7: people generally enjoy watching movies, potentially explaining the positive bias!</p>
856
+ <p>Now let's turn back to our scatter plot of Rotten Tomatoes and IMDB ratings. Here's what happens if we bin both axes of our original plot.</p>
857
+
858
+ </div>
859
+ </div>
860
+ </div>
861
+
862
+
863
+
864
+ <div class="
865
+ cell border-box-sizing code_cell rendered">
866
+ <div class="input">
867
+
868
+ <div class="inner_cell">
869
+ <div class="input_area">
870
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_circle</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
871
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
872
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;IMDB_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
873
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
874
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
875
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
876
+ <span class="p">)</span>
877
+ </pre></div>
878
+
879
+ </div>
880
+ </div>
881
+ </div>
882
+
883
+ <div class="output_wrapper">
884
+ <div class="output">
885
+
886
+
887
+ <div class="output_area">
888
+
889
+
890
+
891
+
892
+ <div class="output_html rendered_html output_subarea output_execute_result">
893
+
894
+ <div id="altair-viz-d192f47b42ac448db255588b3bf801eb"></div>
895
+ <script type="text/javascript">
896
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
897
+ (function(spec, embedOpt){
898
+ let outputDiv = document.currentScript.previousElementSibling;
899
+ if (outputDiv.id !== "altair-viz-d192f47b42ac448db255588b3bf801eb") {
900
+ outputDiv = document.getElementById("altair-viz-d192f47b42ac448db255588b3bf801eb");
901
+ }
902
+ const paths = {
903
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
904
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
905
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
906
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
907
+ };
908
+
909
+ function maybeLoadScript(lib, version) {
910
+ var key = `${lib.replace("-", "")}_version`;
911
+ return (VEGA_DEBUG[key] == version) ?
912
+ Promise.resolve(paths[lib]) :
913
+ new Promise(function(resolve, reject) {
914
+ var s = document.createElement('script');
915
+ document.getElementsByTagName("head")[0].appendChild(s);
916
+ s.async = true;
917
+ s.onload = () => {
918
+ VEGA_DEBUG[key] = version;
919
+ return resolve(paths[lib]);
920
+ };
921
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
922
+ s.src = paths[lib];
923
+ });
924
+ }
925
+
926
+ function showError(err) {
927
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
928
+ throw err;
929
+ }
930
+
931
+ function displayChart(vegaEmbed) {
932
+ vegaEmbed(outputDiv, spec, embedOpt)
933
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
934
+ }
935
+
936
+ if(typeof define === "function" && define.amd) {
937
+ requirejs.config({paths});
938
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
939
+ } else {
940
+ maybeLoadScript("vega", "5")
941
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
942
+ .then(() => maybeLoadScript("vega-embed", "6"))
943
+ .catch(showError)
944
+ .then(() => displayChart(vegaEmbed));
945
+ }
946
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "circle", "encoding": {"x": {"bin": {"maxbins": 20}, "field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"bin": {"maxbins": 20}, "field": "IMDB_Rating", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
947
+ </script>
948
+ </div>
949
+
950
+ </div>
951
+
952
+ </div>
953
+ </div>
954
+
955
+ </div>
956
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
957
+ <div class="text_cell_render border-box-sizing rendered_html">
958
+ <p>Detail is lost due to overplotting, with many points drawn directly on top of each other.</p>
959
+ <p>To form a two-dimensional histogram we can add a count aggregate as before. As both the x and y encoding channels are already taken, we must use a different encoding channel to convey the counts. Here is the result of using circular area by adding a size encoding channel.</p>
960
+
961
+ </div>
962
+ </div>
963
+ </div>
964
+
965
+
966
+
967
+ <div class="
968
+ cell border-box-sizing code_cell rendered">
969
+ <div class="input">
970
+
971
+ <div class="inner_cell">
972
+ <div class="input_area">
973
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_circle</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
974
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
975
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;IMDB_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
976
+ <span class="n">alt</span><span class="o">.</span><span class="n">Size</span><span class="p">(</span><span class="s1">&#39;count()&#39;</span><span class="p">)</span>
977
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
978
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
979
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
980
+ <span class="p">)</span>
981
+ </pre></div>
982
+
983
+ </div>
984
+ </div>
985
+ </div>
986
+
987
+ <div class="output_wrapper">
988
+ <div class="output">
989
+
990
+
991
+ <div class="output_area">
992
+
993
+
994
+
995
+
996
+ <div class="output_html rendered_html output_subarea output_execute_result">
997
+
998
+ <div id="altair-viz-49f403013cbf44118f18d9bcf1f8fe5b"></div>
999
+ <script type="text/javascript">
1000
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1001
+ (function(spec, embedOpt){
1002
+ let outputDiv = document.currentScript.previousElementSibling;
1003
+ if (outputDiv.id !== "altair-viz-49f403013cbf44118f18d9bcf1f8fe5b") {
1004
+ outputDiv = document.getElementById("altair-viz-49f403013cbf44118f18d9bcf1f8fe5b");
1005
+ }
1006
+ const paths = {
1007
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1008
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1009
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1010
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1011
+ };
1012
+
1013
+ function maybeLoadScript(lib, version) {
1014
+ var key = `${lib.replace("-", "")}_version`;
1015
+ return (VEGA_DEBUG[key] == version) ?
1016
+ Promise.resolve(paths[lib]) :
1017
+ new Promise(function(resolve, reject) {
1018
+ var s = document.createElement('script');
1019
+ document.getElementsByTagName("head")[0].appendChild(s);
1020
+ s.async = true;
1021
+ s.onload = () => {
1022
+ VEGA_DEBUG[key] = version;
1023
+ return resolve(paths[lib]);
1024
+ };
1025
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1026
+ s.src = paths[lib];
1027
+ });
1028
+ }
1029
+
1030
+ function showError(err) {
1031
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1032
+ throw err;
1033
+ }
1034
+
1035
+ function displayChart(vegaEmbed) {
1036
+ vegaEmbed(outputDiv, spec, embedOpt)
1037
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1038
+ }
1039
+
1040
+ if(typeof define === "function" && define.amd) {
1041
+ requirejs.config({paths});
1042
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1043
+ } else {
1044
+ maybeLoadScript("vega", "5")
1045
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1046
+ .then(() => maybeLoadScript("vega-embed", "6"))
1047
+ .catch(showError)
1048
+ .then(() => displayChart(vegaEmbed));
1049
+ }
1050
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "circle", "encoding": {"size": {"aggregate": "count", "type": "quantitative"}, "x": {"bin": {"maxbins": 20}, "field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"bin": {"maxbins": 20}, "field": "IMDB_Rating", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1051
+ </script>
1052
+ </div>
1053
+
1054
+ </div>
1055
+
1056
+ </div>
1057
+ </div>
1058
+
1059
+ </div>
1060
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1061
+ <div class="text_cell_render border-box-sizing rendered_html">
1062
+ <p>Alternatively, we can encode counts using the color channel and change the mark type to bar. The result is a two-dimensional histogram in the form of a heatmap.</p>
1063
+
1064
+ </div>
1065
+ </div>
1066
+ </div>
1067
+
1068
+
1069
+
1070
+ <div class="
1071
+ cell border-box-sizing code_cell rendered">
1072
+ <div class="input">
1073
+
1074
+ <div class="inner_cell">
1075
+ <div class="input_area">
1076
+ <div class=" highlight hl-ipython3"><pre><span></span><span class="n">alt</span><span class="o">.</span><span class="n">Chart</span><span class="p">(</span><span class="n">movies_url</span><span class="p">)</span><span class="o">.</span><span class="n">mark_bar</span><span class="p">()</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span>
1077
+ <span class="n">alt</span><span class="o">.</span><span class="n">X</span><span class="p">(</span><span class="s1">&#39;Rotten_Tomatoes_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
1078
+ <span class="n">alt</span><span class="o">.</span><span class="n">Y</span><span class="p">(</span><span class="s1">&#39;IMDB_Rating:Q&#39;</span><span class="p">,</span> <span class="nb">bin</span><span class="o">=</span><span class="n">alt</span><span class="o">.</span><span class="n">BinParams</span><span class="p">(</span><span class="n">maxbins</span><span class="o">=</span><span class="mi">20</span><span class="p">)),</span>
1079
+ <span class="n">alt</span><span class="o">.</span><span class="n">Color</span><span class="p">(</span><span class="s1">&#39;count()&#39;</span><span class="p">)</span>
1080
+ <span class="p">)</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span>
1081
+ <span class="n">width</span><span class="o">=</span><span class="mi">800</span><span class="p">,</span>
1082
+ <span class="n">height</span><span class="o">=</span><span class="mi">400</span>
1083
+ <span class="p">)</span>
1084
+ </pre></div>
1085
+
1086
+ </div>
1087
+ </div>
1088
+ </div>
1089
+
1090
+ <div class="output_wrapper">
1091
+ <div class="output">
1092
+
1093
+
1094
+ <div class="output_area">
1095
+
1096
+
1097
+
1098
+
1099
+ <div class="output_html rendered_html output_subarea output_execute_result">
1100
+
1101
+ <div id="altair-viz-ea5c6bddfd524df484e60577255c49cc"></div>
1102
+ <script type="text/javascript">
1103
+ var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
1104
+ (function(spec, embedOpt){
1105
+ let outputDiv = document.currentScript.previousElementSibling;
1106
+ if (outputDiv.id !== "altair-viz-ea5c6bddfd524df484e60577255c49cc") {
1107
+ outputDiv = document.getElementById("altair-viz-ea5c6bddfd524df484e60577255c49cc");
1108
+ }
1109
+ const paths = {
1110
+ "vega": "https://cdn.jsdelivr.net/npm//vega@5?noext",
1111
+ "vega-lib": "https://cdn.jsdelivr.net/npm//vega-lib?noext",
1112
+ "vega-lite": "https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext",
1113
+ "vega-embed": "https://cdn.jsdelivr.net/npm//vega-embed@6?noext",
1114
+ };
1115
+
1116
+ function maybeLoadScript(lib, version) {
1117
+ var key = `${lib.replace("-", "")}_version`;
1118
+ return (VEGA_DEBUG[key] == version) ?
1119
+ Promise.resolve(paths[lib]) :
1120
+ new Promise(function(resolve, reject) {
1121
+ var s = document.createElement('script');
1122
+ document.getElementsByTagName("head")[0].appendChild(s);
1123
+ s.async = true;
1124
+ s.onload = () => {
1125
+ VEGA_DEBUG[key] = version;
1126
+ return resolve(paths[lib]);
1127
+ };
1128
+ s.onerror = () => reject(`Error loading script: ${paths[lib]}`);
1129
+ s.src = paths[lib];
1130
+ });
1131
+ }
1132
+
1133
+ function showError(err) {
1134
+ outputDiv.innerHTML = `<div class="error" style="color:red;">${err}</div>`;
1135
+ throw err;
1136
+ }
1137
+
1138
+ function displayChart(vegaEmbed) {
1139
+ vegaEmbed(outputDiv, spec, embedOpt)
1140
+ .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));
1141
+ }
1142
+
1143
+ if(typeof define === "function" && define.amd) {
1144
+ requirejs.config({paths});
1145
+ require(["vega-embed"], displayChart, err => showError(`Error loading script: ${err.message}`));
1146
+ } else {
1147
+ maybeLoadScript("vega", "5")
1148
+ .then(() => maybeLoadScript("vega-lite", "4.17.0"))
1149
+ .then(() => maybeLoadScript("vega-embed", "6"))
1150
+ .catch(showError)
1151
+ .then(() => displayChart(vegaEmbed));
1152
+ }
1153
+ })({"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}, "data": {"url": "https://cdn.jsdelivr.net/npm/vega-datasets@1/data/movies.json"}, "mark": "bar", "encoding": {"color": {"aggregate": "count", "type": "quantitative"}, "x": {"bin": {"maxbins": 20}, "field": "Rotten_Tomatoes_Rating", "type": "quantitative"}, "y": {"bin": {"maxbins": 20}, "field": "IMDB_Rating", "type": "quantitative"}}, "height": 400, "width": 800, "$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json"}, {"mode": "vega-lite"});
1154
+ </script>
1155
+ </div>
1156
+
1157
+ </div>
1158
+
1159
+ </div>
1160
+ </div>
1161
+
1162
+ </div>
1163
+ <div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
1164
+ <div class="text_cell_render border-box-sizing rendered_html">
1165
+ <p>Compare the size and color-based 2D histograms above. Which encoding do you think should be preferred? Why? In which plot can you more precisely compare the magnitude of individual values? In which plot can you more accurately see the overall density of ratings?</p>
1166
+
1167
+ </div>
1168
+ </div>
1169
+ </div>
1170
+