{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook creates a dashboard for evaluation of openness of scientific literature \n", "It was submitted to the John Hunter Excellence in Plotting Contest 2020\n", "\n", "Content under CC-BY-NC-SA 4.0 license \n", "Code under GNU-GPL v3.0 license \n", "© 2020 Serena Bonaretti" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "--- " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create jupyter-flex parameters: \n", "(i.e. the following cells are tagged as \"parameters\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "parameters" ] }, "outputs": [], "source": [ "# title of the dashboard (cell tagged as \"parameters\")\n", "flex_title = \"Open Data, Open Software, and Open Access Publications in Knee Cartilage Segmentation Literature\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "parameters" ] }, "outputs": [], "source": [ "# add link to the source code in the top bar\n", "flex_source_code = \"https://github.com/sbonaretti/Hunter_viz_2020/blob/master/open_literature_flex.ipynb\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "parameters" ] }, "outputs": [], "source": [ "# layout\n", "flex_orientation = \"rows\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "--- " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Imports:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "meta" ] }, "outputs": [], "source": [ "import wget # to download from zenodo\n", "import pandas as pd \n", "import numpy as np\n", "\n", "import plotly.express as px\n", "import plotly.graph_objects as go\n", "\n", "import ipywidgets as widgets\n", "from ipywidgets import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "--- " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load the data:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# for Jupyter notebook and Binder (not JupyterLab)\n", "#alt.renderers.enable('notebook')\n", "\n", "# file name and zenodo url\n", "file_name = \"cart_segm_literature_viz.csv\"\n", "zenodo_url = \"https://zenodo.org/record/3872040/files/\" # are the last digits of the specific version of dataset DOI\n", "\n", "# download\n", "wget.download(zenodo_url + file_name, \"./\" + file_name) # input, output\n", "\n", "# load literature table\n", "literature = pd.read_csv(\"./\" + file_name)\n", "\n", "# replace underscore with space and opening bracket\n", "literature[\"bibtex_id\"] = literature[\"bibtex_id\"].str.replace('_',' (')\n", "# adding closing bracket\n", "literature[\"bibtex_id\"] = literature[\"bibtex_id\"].astype(str) + \")\" \n", "\n", "# adding little randomness to latitude and longitude to avoid dot overlaps\n", "np.random.seed(seed=3) # if this is not present, the cell is not reproducible\n", "\n", "# add randomness to latitude\n", "random_lat = np.random.uniform(low=0.0, high=2.5, size=(len(literature[\"latitude\"]),))\n", "literature[\"latitude_random\"] = literature[\"latitude\"] + pd.Series(random_lat)\n", "\n", "# add randomness to longitude\n", "random_lon = np.random.uniform(low=0.0, high=2.5, size=(len(literature[\"longitude\"]),))\n", "literature[\"longitude_random\"] = literature[\"longitude\"] + pd.Series(random_lon)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "--- \n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following markdown cells corresponding to titles are used by jupyter-flex to create the sessions of the dashboard \n", "Cells containing comments start with ->\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "size=1000" ] }, "source": [ "## Row 1 of dashboard" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "-> Create the sidebar: " ] }, { "cell_type": "markdown", "metadata": { "tags": [ "size=150" ] }, "source": [ "### Select one or more criteria " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "inputs" ] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8585fa44cf0b4f6393b846a671008cda", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(Checkbox(value=False, description='Open original data', indent=False), Checkbox(value=False, de…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# declare the ipywidgets of the left sidebar\n", "\n", "open_original_data = widgets.Checkbox(\n", " value=False,\n", " description='Open original data',\n", " disabled=False,\n", " indent=False\n", ")\n", "\n", "open_derived_data = widgets.Checkbox(\n", " value=False,\n", " description='Open derived data',\n", " disabled=False,\n", " indent=False\n", ")\n", "\n", "open_software = widgets.Checkbox(\n", " value=False,\n", " description='Open-source software',\n", " disabled=False,\n", " indent=False\n", ")\n", "\n", "open_access = widgets.Checkbox(\n", " value=False,\n", " description='Open access paper',\n", " disabled=False,\n", " indent=False\n", ")\n", "\n", "# combine the widgets in a vertical box\n", "VBox([open_original_data, open_derived_data, open_software, open_access])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "-> Create the literature map:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Literature Map" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# decleare the widget where the map is going to be displayed\n", "output_map = widgets.Output()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# create the output map using plotly\n", "fig = go.FigureWidget()\n", "\n", "fig = px.scatter_geo(literature, lat=\"latitude_random\", lon= \"longitude_random\", projection=\"equirectangular\",\n", " hover_name = \"bibtex_id\" )\n", "\n", "fig.data[0]['marker']['color'] = \"black\"\n", "fig.data[0]['marker']['size'] = 8\n", "\n", "margin = go.layout.Margin(l=20, r=20, b=20, t=20)\n", "fig = fig.update_layout(margin=margin)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def on_value_change(change):\n", " \n", " output_map.clear_output()\n", "\n", " # update the map\n", " with output_map:\n", " \n", " flag_checkbox = 1\n", "\n", " # select rows that match the criteria\n", " \n", " # one checkbox is clicked\n", " if (open_original_data.value == True) & (open_derived_data.value == False) & (open_software.value == False) & (open_access.value == False):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" ')\n", " end_result_text = \"open original data\"\n", " elif (open_original_data.value == False) & (open_derived_data.value == True) & (open_software.value == False) & (open_access.value == False):\n", " current_data = literature.query(' link_to_open_derived_data != \"not_available\" ')\n", " end_result_text = \"open derived data\"\n", " elif (open_original_data.value == False) & (open_derived_data.value == False) & (open_software.value == True) & (open_access.value == False):\n", " current_data = literature.query(' link_to_open_source_code != \"not_available\" ')\n", " end_result_text = \"open-source software\"\n", " elif (open_original_data.value == False) & (open_derived_data.value == False) & (open_software.value == False) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_access != \"not_available\" ')\n", " end_result_text = \"open access publication\"\n", " \n", " # two checkboxes are clicked\n", " elif (open_original_data.value == True) & (open_derived_data.value == True) & (open_software.value == False) & (open_access.value == False):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" & link_to_open_derived_data != \"not_available\"')\n", " end_result_text = \"open original data and open derived data\"\n", " elif (open_original_data.value == True) & (open_derived_data.value == False) & (open_software.value == True) & (open_access.value == False):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" & link_to_open_source_code != \"not_available\"')\n", " end_result_text = \"open original data and open-source code\"\n", " elif (open_original_data.value == True) & (open_derived_data.value == False) & (open_software.value == False) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" & link_to_open_access != \"not_available\"')\n", " end_result_text = \"open original data and access publication\"\n", " elif (open_original_data.value == False) & (open_derived_data.value == True) & (open_software.value == True) & (open_access.value == False):\n", " current_data = literature.query(' link_to_open_derived_data != \"not_available\" & link_to_open_source_code != \"not_available\"')\n", " end_result_text = \"open derived data and open source data\"\n", " elif (open_original_data.value == False) & (open_derived_data.value == True) & (open_software.value == False) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_derived_data != \"not_available\" & link_to_open_access != \"not_available\"')\n", " end_result_text = \"open derived data and open access publication\"\n", " elif (open_original_data.value == False) & (open_derived_data.value == False) & (open_software.value == True) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_source_code != \"not_available\" & link_to_open_access != \"not_available\"')\n", " end_result_text = \"open-source code and open access publication\"\n", "\n", " # # three checkboxes are clicked\n", " elif (open_original_data.value == False) & (open_derived_data.value == True) & (open_software.value == True) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_derived_data != \"not_available\" & link_to_open_source_code != \"not_available\" & link_to_open_access != \"not_available\"') \n", " end_result_text = \"open derived data, open-source code, and open access publication\"\n", " elif (open_original_data.value == True) & (open_derived_data.value == False) & (open_software.value == True) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" & link_to_open_source_code != \"not_available\" & link_to_open_access != \"not_available\"') \n", " end_result_text = \"open original data, open-source code, and open access publication\"\n", " elif (open_original_data.value == True) & (open_derived_data.value == True) & (open_software.value == False) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" & link_to_open_derived_data != \"not_available\" & link_to_open_access != \"not_available\"') \n", " end_result_text = \"open original data, open derived data, and open access publication\"\n", " elif (open_original_data.value == True) & (open_derived_data.value == True) & (open_software.value == True) & (open_access.value == False):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" & link_to_open_derived_data != \"not_available\" & link_to_open_source_code != \"not_available\"') \n", " end_result_text = \"open original data, open derived data, and open-source code\"\n", "\n", " # all checkboxes are clicked\n", " elif (open_original_data.value == True) & (open_derived_data.value == True) & (open_software.value == True) & (open_access.value == True):\n", " current_data = literature.query(' link_to_open_original_data != \"not_available\" & link_to_open_derived_data != \"not_available\" & link_to_open_source_code != \"not_available\" & link_to_open_access != \"not_available\"') \n", " end_result_text = \"open original data, open derived data, open-source code, and open access publication\"\n", "\n", " # no checkbox is clicked \n", " elif (open_original_data.value == False) & (open_derived_data.value == False) & (open_software.value == False) & (open_access.value == False):\n", " current_data = literature # for output_table\n", " flag_checkbox = 0\n", "\n", " # create color list and transform it to a pandas series\n", " color_list = [\"black\"]*literature.shape[0]\n", " color_series = pd.Series(color_list)\n", " \n", " # change color to red for cells satisfing the query (when at least a checkbox is clicked, i.e. exclude the last elif where color_flag == 1)\n", " if flag_checkbox == 1: \n", " color_series.loc[current_data.index.values] = \"red\"\n", "\n", " # update the colors in the figure\n", " fig.data[0][\"marker\"]['color'] = color_series\n", " \n", " \n", " display(fig)\n", " \n", "\n", "\n", " # update the table output\n", " \n", " output_table.clear_output()\n", " \n", " with output_table:\n", " if flag_checkbox == 1:\n", " \n", " # print out the text\n", " if current_data.shape[0] == 0 or current_data.shape[0] == 1: # has\n", " report.value = \"Out of \" + str(literature.shape[0]) + \" papers, \" + str(current_data.shape[0]) + \" has \" + end_result_text\n", " else: # have \n", " report.value = \"Out of \" + str(literature.shape[0]) + \" papers, \" + str(current_data.shape[0]) + \" have \" + end_result_text\n", " \n", " # clear the table for print out\n", " current_data = current_data.drop([\"algorithm_type\", \"bibtex_id\", \"latitude\", \"longitude\", \"latitude_random\", \"longitude_random\"], axis=1)\n", " current_data = current_data.rename(columns={\"author_1\": \"First Author\", \"country_last_author\":\"Country\", \"title\": \"Title\", \"year\":\"Year\", \"link_to_open_access\":\"Open Access Publication\", \\\n", " \"link_to_open_original_data\": \"Original Data\", \"link_to_open_derived_data\": \"Derived Data\", \"link_to_open_source_code\":\"Open Source Code\" })\n", "\n", " # print out the table\n", " display (current_data)\n", " else: \n", " report.value = \" \"\n", " \n", "\n", "# observe functions for the widgets\n", "open_original_data.observe(on_value_change, names = \"value\")\n", "open_derived_data.observe(on_value_change, names = \"value\")\n", "open_software.observe(on_value_change, names = \"value\")\n", "open_access.observe(on_value_change, names = \"value\")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [ "chart" ] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c34e1451d421494787fecdca6b133f9e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# show output map\n", "output_map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Row 2 of dashboard" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "-> Write the outputs of the selections:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Selected papers" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [ "inputs" ] }, "outputs": [], "source": [ "# create the widgets for the session\n", "\n", "report = widgets.Label(\" \") # it will contain the sentence about how many paper match a criteria\n", "output_table = widgets.Output() # it will show the output table " ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [ "inputs" ] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6a8a90f62c7a49c19b8752d0ed88e04f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(Label(value=' '), Output()))" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# show the widgets\n", "VBox([report, output_table])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "-> Footer " ] }, { "cell_type": "markdown", "metadata": { "tags": [ "footer" ] }, "source": [ "Content under CC-BY-NC-SA 4.0 license \n", "Code under GNU-GPL v3.0 license \n", "© 2020 Serena Bonaretti" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "-> Dependencies for reproducibility of this notebook" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPython 3.7.6\n", "IPython 7.13.0\n", "\n", "wget 3.2\n", "pandas 1.0.3\n", "numpy 1.18.1\n", "plotly 4.8.0\n", "jupyter_flex 0.5.0\n", "voila 0.1.21\n", "watermark 2.0.2\n", "\n", "compiler : Clang 4.0.1 (tags/RELEASE_401/final)\n", "system : Darwin\n", "release : 19.4.0\n", "machine : x86_64\n", "processor : i386\n", "CPU cores : 4\n", "interpreter: 64bit\n" ] } ], "source": [ "%load_ext watermark\n", "\n", "# python, ipython, packages, and machine characteristics\n", "%watermark -v -m -p wget,pandas,numpy,plotly,jupyter_flex,voila,watermark " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "1309db2332d4462596e71058a11cf32d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LabelModel", "state": { "layout": "IPY_MODEL_19d84c91cb5c4652ab4030a796081bef", "style": "IPY_MODEL_90abc6abce434ed0a5b8225e676d6ce6", "value": " " } }, "19d84c91cb5c4652ab4030a796081bef": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "1ba9530a95e0403d91a72ab52fc75513": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "1c7db1405be949b0b59608ac68046520": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "CheckboxModel", "state": { "description": "Open original data", "disabled": false, "indent": false, "layout": "IPY_MODEL_1ba9530a95e0403d91a72ab52fc75513", "style": "IPY_MODEL_707ffd8fe7174c6192da7c61629e5288", "value": false } }, "28316bfdeeec4d52980bf435db6ed7b2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "2d8d72621c4942c8aa68f2f49da0e0be": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "370e71adbc994db698a4ab39d48f2ccb": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "4ac1e1e4e41d4f5abcb5d125ea512411": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_ed316ac331064324bc6234a9f3c89939" } }, "4ef712c010854521a44937835f4dadba": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "51f807bb58cd40bbae755ef6d1c6373e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "CheckboxModel", "state": { "description": "Open access paper", "disabled": false, "indent": false, "layout": "IPY_MODEL_fb23faf08a2a430baade135591034f09", "style": "IPY_MODEL_28316bfdeeec4d52980bf435db6ed7b2", "value": false } }, "538041f8b11a4bdaaf7fd68f848a4f0d": { "model_module": "plotlywidget", "model_module_version": "^4.8.0", "model_name": "FigureModel", "state": { "_config": { "plotlyServerURL": "https://plot.ly" }, "_js2py_layoutDelta": {}, "_js2py_pointsCallback": {}, "_js2py_relayout": {}, "_js2py_restyle": {}, "_js2py_traceDeltas": {}, "_js2py_update": {}, "_layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } } }, "_py2js_addTraces": {}, "_py2js_animate": {}, "_py2js_deleteTraces": {}, "_py2js_moveTraces": {}, "_py2js_removeLayoutProps": {}, "_py2js_removeTraceProps": {}, "_py2js_restyle": {}, "_py2js_update": {}, "_view_count": 0 } }, "61eee9a091c14d6d90504cc123bdc572": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "6a8a90f62c7a49c19b8752d0ed88e04f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "children": [ "IPY_MODEL_1309db2332d4462596e71058a11cf32d", "IPY_MODEL_4ac1e1e4e41d4f5abcb5d125ea512411" ], "layout": "IPY_MODEL_acd66ed7ef5d43fcb56527d89ebe38a3" } }, "707ffd8fe7174c6192da7c61629e5288": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "753df1c956c140fa92a2561f604aea2c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "CheckboxModel", "state": { "description": "Open derived data", "disabled": false, "indent": false, "layout": "IPY_MODEL_cb291aafc0554fcb8a7af3fb1bd383f4", "style": "IPY_MODEL_4ef712c010854521a44937835f4dadba", "value": false } }, "8585fa44cf0b4f6393b846a671008cda": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "VBoxModel", "state": { "children": [ "IPY_MODEL_1c7db1405be949b0b59608ac68046520", "IPY_MODEL_753df1c956c140fa92a2561f604aea2c", "IPY_MODEL_b9fe1be96a0143938d5b1ab3a327d3e9", "IPY_MODEL_51f807bb58cd40bbae755ef6d1c6373e" ], "layout": "IPY_MODEL_61eee9a091c14d6d90504cc123bdc572" } }, "90abc6abce434ed0a5b8225e676d6ce6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "acd66ed7ef5d43fcb56527d89ebe38a3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "b9fe1be96a0143938d5b1ab3a327d3e9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "CheckboxModel", "state": { "description": "Open-source software", "disabled": false, "indent": false, "layout": "IPY_MODEL_370e71adbc994db698a4ab39d48f2ccb", "style": "IPY_MODEL_f3d8b6d6c67848959fbfae136c63247e", "value": false } }, "c34e1451d421494787fecdca6b133f9e": { "model_module": "@jupyter-widgets/output", "model_module_version": "1.0.0", "model_name": "OutputModel", "state": { "layout": "IPY_MODEL_2d8d72621c4942c8aa68f2f49da0e0be" } }, "cb291aafc0554fcb8a7af3fb1bd383f4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "ed316ac331064324bc6234a9f3c89939": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, "f3d8b6d6c67848959fbfae136c63247e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, "fb23faf08a2a430baade135591034f09": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }