You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2024/02/03 07:38:52 UTC

(superset) 01/01: docs(maps): jupyter notebook now auto-updates docs site

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch auto-docs-for-country-map
in repository https://gitbox.apache.org/repos/asf/superset.git

commit d0153adec38aae18938a2feed3b7e6701521aadf
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Sat Feb 3 00:38:43 2024 -0700

    docs(maps): jupyter notebook now auto-updates docs site
---
 docs/data/countries.json                           |  99 ++++++++++
 docs/docs/miscellaneous/country-map-tools.mdx      |  38 +---
 .../scripts/Country Map GeoJSON Generator.ipynb    | 211 ++++++++++++---------
 3 files changed, 231 insertions(+), 117 deletions(-)

diff --git a/docs/data/countries.json b/docs/data/countries.json
new file mode 100644
index 0000000000..f5910ecd23
--- /dev/null
+++ b/docs/data/countries.json
@@ -0,0 +1,99 @@
+{
+  "countries": [
+    "Afghanistan",
+    "Albania",
+    "Algeria",
+    "Argentina",
+    "Australia",
+    "Austria",
+    "Belgium",
+    "Bolivia",
+    "Brazil",
+    "Bulgaria",
+    "Burundi",
+    "Canada",
+    "Chile",
+    "China",
+    "Colombia",
+    "Costa Rica",
+    "Cuba",
+    "Cyprus",
+    "Denmark",
+    "Dominican Republic",
+    "Ecuador",
+    "Egypt",
+    "El Salvador",
+    "Estonia",
+    "Ethiopia",
+    "France",
+    "France Regions",
+    "Finland",
+    "Germany",
+    "Guatemala",
+    "Haiti",
+    "Honduras",
+    "Iceland",
+    "India",
+    "Indonesia",
+    "Iran",
+    "Italy",
+    "Italy Regions",
+    "Japan",
+    "Jordan",
+    "Kazakhstan",
+    "Kenya",
+    "Korea",
+    "Kuwait",
+    "Kyrgyzstan",
+    "Latvia",
+    "Liechtenstein",
+    "Lithuania",
+    "Malaysia",
+    "Mexico",
+    "Morocco",
+    "Myanmar",
+    "Netherlands",
+    "Nicaragua",
+    "Nigeria",
+    "Norway",
+    "Oman",
+    "Pakistan",
+    "Panama",
+    "Papua New Guinea",
+    "Paraguay",
+    "Peru",
+    "Philippines",
+    "Portugal",
+    "Poland",
+    "Puerto Rico",
+    "Qatar",
+    "Russia",
+    "Rwanda",
+    "Saint Barthelemy",
+    "Saint Martin",
+    "Saudi Arabia",
+    "Singapore",
+    "Slovenia",
+    "Spain",
+    "Sri Lanka",
+    "Sweden",
+    "Switzerland",
+    "Syria",
+    "Tajikistan",
+    "Tanzania",
+    "Thailand",
+    "Timorleste",
+    "Turkey",
+    "Turkmenistan",
+    "Uganda",
+    "Uk",
+    "Ukraine",
+    "United Arab Emirates",
+    "Uruguay",
+    "Usa",
+    "Uzbekistan",
+    "Venezuela",
+    "Vietnam",
+    "Zambia"
+  ]
+}
diff --git a/docs/docs/miscellaneous/country-map-tools.mdx b/docs/docs/miscellaneous/country-map-tools.mdx
index 89ce110e37..771d370d9e 100644
--- a/docs/docs/miscellaneous/country-map-tools.mdx
+++ b/docs/docs/miscellaneous/country-map-tools.mdx
@@ -5,6 +5,8 @@ sidebar_position: 1
 version: 1
 ---
 
+import countriesData from '../../data/countries.json';
+
 ## The Country Map Visualization
 
 The Country Map visualization allows you to plot lightweight choropleth maps of
@@ -18,37 +20,11 @@ code is less ambiguous and is unique to all regions in the world.
 
 The Country Maps visualization already ships with the maps for the following countries:
 
-- Belgium
-- Brazil
-- Bulgaria
-- Canada
-- China
-- Egypt
-- France
-- Germany
-- India
-- Iran
-- Italy
-- Japan
-- Korea
-- Liechtenstein
-- Morocco
-- Myanmar
-- Netherlands
-- Portugal
-- Russia
-- Singapore
-- Spain
-- Switzerland
-- Syria
-- Thailand
-- Timorleste
-- Turkey
-- UK
-- Ukraine
-- Uruguay
-- USA
-- Zambia
+<ul>
+{countriesData.countries.map((country, index) => (
+  <li key={index}>{country}</li>
+))}
+</ul>
 
 ## Adding a New Country
 
diff --git a/superset-frontend/plugins/legacy-plugin-chart-country-map/scripts/Country Map GeoJSON Generator.ipynb b/superset-frontend/plugins/legacy-plugin-chart-country-map/scripts/Country Map GeoJSON Generator.ipynb
index 6d27bd746a..dddcf24dc5 100644
--- a/superset-frontend/plugins/legacy-plugin-chart-country-map/scripts/Country Map GeoJSON Generator.ipynb	
+++ b/superset-frontend/plugins/legacy-plugin-chart-country-map/scripts/Country Map GeoJSON Generator.ipynb	
@@ -587,7 +587,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAABK4AAAMtCAYAAAC2GTmHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3ib1f338Y+m997xiu3svXcII0DYe7aMMktbRqGl5dfytNBB6QBK2S2bUvbeJIQQkkD2dIYz7HhvS56SLOn5w2Bi4iS2I1uy/X5dVy7iW0fn/grHTvTxOd9j8Hq9XgEAAAAAAAABxujvAgAAAAAAAIDOEFwBAAAAAAAgIBFcAQAAAAAAICARXAEAAAAAACAgEVwBAAAAAAAgIBFcAQAAAAAAICARXAEAAAAAACAgmf1dwPd5PB6VlJQoIiJCBoPB3+UAAAAAAADAh7xer+rr6zVkyBAZjYdfUxVw [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAABK4AAAMtCAYAAAC2GTmHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3ib1f338Y+m997xiu3svXcII0DYe7aMMktbRqGl5dfytNBB6QBK2S2bUvbeJIQQkkD2dIYz7HhvS56SLOn5w2Bi4iS2I1uy/X5dVy7iW0fn/grHTvTxOd9j8Hq9XgEAAAAAAAABxujvAgAAAAAAAIDOEFwBAAAAAAAgIBFcAQAAAAAAICARXAEAAAAAACAgEVwBAAAAAAAgIBFcAQAAAAAAICARXAEAAAAAACAgmf1dwPd5PB6VlJQoIiJCBoPB3+UAAAAAAADAh7xer+rr6zVkyBAZjYdfUxVw [...]
       "text/plain": [
        "<Figure size 2000x1000 with 1 Axes>"
       ]
@@ -598,7 +598,7 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
      "execution_count": 6,
@@ -607,7 +607,7 @@
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt8AAAMtCAYAAABHJx1iAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hc5ZU/8O+903tR7yNb7rZcZMuYTqgJIRBgQzYhkCykkmxC2CRLym+XbNqmVwhJYAktlAAhlEAoptuWJcuWbLlIsnqXpve55ffHSLJltZnRzNyZ0fk8D08iaXTvkayZOfe95z2HEUVRBCGEEEIIISTlWKkDIIQQQgghZLmg5JsQQgghhJA0oeSbEEIIIYSQNKHkmxBCCCGEkDSh5JsQQgghhJA0oeSbEEIIIYSQNKHkmxBCCCGEkDSRSx3AmQRBwODgIAwGAxiGkTocQgghhBBCFiWKIjweD0pL [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt8AAAMtCAYAAABHJx1iAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hc5ZU/8O+903tR7yNb7rZcZMuYTqgJIRBgQzYhkCykkmxC2CRLym+XbNqmVwhJYAktlAAhlEAoptuWJcuWbLlIsnqXpve55ffHSLJltZnRzNyZ0fk8D08iaXTvkayZOfe95z2HEUVRBCGEEEIIISTlWKkDIIQQQgghZLmg5JsQQgghhJA0oeSbEEIIIYSQNKHkmxBCCCGEkDSh5JsQQgghhJA0oeSbEEIIIYSQNKHkmxBCCCGEkDSRSx3AmQRBwODgIAwGAxiGkTocQgghhBBCFiWKIjweD0pL [...]
       "text/plain": [
        "<Figure size 2000x1000 with 1 Axes>"
       ]
@@ -828,7 +828,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAB8sAAAadCAYAAABQx6xgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVhU1f8H8PfMwMywDfsqiywKbrhrWO6mlmmmmZWVpqmZmmuprVqZ2qKVmZm/MvumaZpa2Wq5KyqiKG4oCoIgIMuwM8DM+f2BTI7sCAww79fzzPM4555753Ovw2fuvefccyRCCAEiIiIiIiIiIiIiIiIiIiITIjV2AERERERERERERERERERERA2NjeVERERERERERERERERERGRy2FhOREREREREREREREREREQmh43lRERERERERERERERERERkcthYTkREREREREREREREREREJoeN5URERERE [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAB8sAAAadCAYAAABQx6xgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVhU1f8H8PfMwMywDfsqiywKbrhrWO6mlmmmmZWVpqmZmmuprVqZ2qKVmZm/MvumaZpa2Wq5KyqiKG4oCoIgIMuwM8DM+f2BTI7sCAww79fzzPM4555753Ovw2fuvefccyRCCAEiIiIiIiIiIiIiIiIiIiITIjV2AERERERERERERERERERERA2NjeVERERERERERERERERERGRy2FhOREREREREREREREREREQmh43lRERERERERERERERERERkcthYTkREREREREREREREREREJoeN5URERERE [...]
       "text/plain": [
        "<Figure size 2000x2000 with 95 Axes>"
       ]
@@ -899,7 +899,7 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
      "execution_count": 11,
@@ -908,7 +908,7 @@
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAF3CAYAAAAFEil7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABq+klEQVR4nO3dd3hc1bU28PdM7029FxdJlns3xhRjEGASCKZDQk3DkIAJCYaEclPghlxKvmACCYEQ4pAAAUIzAdvY4I7cm9xkS7J6maIy/Xx/yJItq81IU6X39zx6QHPOnNmzJeus2XvttQVRFEUQERERRYgk2g0gIiKi0YXBBxEREUUUgw8iIiKKKAYfREREFFEMPoiIiCiiGHwQERFRRDH4ICIiooiSRbsBZ/P7/aiuroZer4cgCNFuDhEREQVAFEU4HA6kp6dDIhl4bCPmgo/q6mpkZWVFuxlEREQ0BJWVlcjM [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAF3CAYAAAAFEil7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABq+klEQVR4nO3dd3hc1bU28PdM7029FxdJlns3xhRjEGASCKZDQk3DkIAJCYaEclPghlxKvmACCYEQ4pAAAUIzAdvY4I7cm9xkS7J6maIy/Xx/yJItq81IU6X39zx6QHPOnNmzJeus2XvttQVRFEUQERERRYgk2g0gIiKi0YXBBxEREUUUgw8iIiKKKAYfREREFFEMPoiIiCiiGHwQERFRRDH4ICIiooiSRbsBZ/P7/aiuroZer4cgCNFuDhEREQVAFEU4HA6kp6dDIhl4bCPmgo/q6mpkZWVFuxlEREQ0BJWVlcjM [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -924,7 +924,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 12,
    "metadata": {
     "id": "ixC6KENXt1LU",
     "outputId": "8e63cb2d-d733-4a9f-caf6-ccc843f15b5d"
@@ -933,16 +933,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 13,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAFvCAYAAAAFeQD2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACfgElEQVR4nOzdd1hb59k/8O/R3ou9p20MeGCMdxyPLGcnzptmtM1ezWiTjjRv+7ZNOpImv7YZbdK0TZM2sxlN0+xtxyM2GOOFDQbM3iC0t3R+f8hgY8AgkHSOxP25Li4bjaMHIaT7PM9z3zfDsiwLQgghhBBCIkDA9QAIIYQQQkj8omCTEEIIIYREDAWbhBBCCCEkYijYJIQQQgghEUPBJiGEEEIIiRgKNgkhhBBCSMRQsEkIIYQQQiKGgk1CCCGEEBIxIq4HcKpAIICuri6o1WowDMP1cAghhBBCyClYloXVakV6 [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAFvCAYAAAAFeQD2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACfgElEQVR4nOzdd1hb59k/8O/R3ou9p20MeGCMdxyPLGcnzptmtM1ezWiTjjRv+7ZNOpImv7YZbdK0TZM2sxlN0+xtxyM2GOOFDQbM3iC0t3R+f8hgY8AgkHSOxP25Li4bjaMHIaT7PM9z3zfDsiwLQgghhBBCIkDA9QAIIYQQQkj8omCTEEIIIYREDAWbhBBCCCEkYijYJIQQQgghEUPBJiGEEEIIiRgKNgkhhBBCSMRQsEkIIYQQQiKGgk1CCCGEEBIxIq4HcKpAIICuri6o1WowDMP1cAghhBBCyClYloXVakV6 [...]
       "text/plain": [
        "<Figure size 800x800 with 1 Axes>"
       ]
@@ -988,7 +988,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 13,
    "metadata": {
     "id": "vN4Ngpe7t1LU",
     "outputId": "3bcdc612-cc01-49be-fe19-f6e08e833fca"
@@ -1145,7 +1145,7 @@
        "[3 rows x 51 columns]"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1168,7 +1168,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 14,
    "metadata": {
     "id": "PP6E24eEt1LV",
     "outputId": "2621d5f1-1edc-42fc-e8df-8afd6a525cc6",
@@ -1178,16 +1178,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 15,
+     "execution_count": 14,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9EAAALDCAYAAAASWYNXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5hkZZU/8O+tnFPn3D0550AWBERRDKCygDnHVdTVZdVV0FV3/a24RtR1xQCCKCAZyWlCT+7pyd3TOXdXzun+/uiZZno6Vb4Vvp/n4WGmq+reMzPdVffc97znCKIoiiAiIiIiIiKiBcmkDoCIiIiIiIioUDCJJiIiIiIiIkoQk2giIiIiIiKiBDGJJiIiIiIiIkoQk2giIiIiIiKiBDGJJiIiIiIiIkoQk2giIiIiIiKiBDGJJiIiIiIiIkqQQuoAzhePxzE4OAij0QhBEKQOh4iIiIiIiIqcKIrw [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9EAAALDCAYAAAASWYNXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5hkZZU/8O+tnFPn3D0550AWBERRDKCygDnHVdTVZdVV0FV3/a24RtR1xQCCKCAZyWlCT+7pyd3TOXdXzun+/uiZZno6Vb4Vvp/n4WGmq+reMzPdVffc97znCKIoiiAiIiIiIiKiBcmkDoCIiIiIiIioUDCJJiIiIiIiIkoQk2giIiIiIiKiBDGJJiIiIiIiIkoQk2giIiIiIiKiBDGJJiIiIiIiIkoQk2giIiIiIiKiBDGJJiIiIiIiIkqQQuoAzhePxzE4OAij0QhBEKQOh4iIiIiIiIqcKIrw [...]
       "text/plain": [
        "<Figure size 1200x1200 with 1 Axes>"
       ]
@@ -1231,7 +1231,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 15,
    "metadata": {
     "id": "LuNGgwiQt1LV"
    },
@@ -1252,7 +1252,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 16,
    "metadata": {
     "id": "v8ig_jQDt1LV",
     "outputId": "3f10b14d-dde2-46d9-f4f6-6f4311fb3e73"
@@ -1261,16 +1261,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 17,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf0AAAPHCAYAAAAispBqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAADyEklEQVR4nOzdd3ib5dk28FPbsq3pve3sOHuzR6GFMgstpYPR0vGW0tJC27fQ9bZfB92DbsrooNDJKpQ9AyFx9o7jJN7b1t7r+f5wMBl2LNmS7ueRzt9x5DgSW5auJJJOPfe4bpUkSRKIiIgo56lFF0BERETZwdAnIiLKEwx9IiKiPMHQJyIiyhMMfSIiojzB0CciIsoTDH0iIqI8oRVdwIkSiQT6+vpgMpmgUqlEl0NERCRLkiTB6/WiuroaanVy1/CyC/2+vj7U1dWJLoOIiEgRuru7UVtbm9RtZRf6JpMJwNhf [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf0AAAPHCAYAAAAispBqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAADyEklEQVR4nOzdd3ib5dk28FPbsq3pve3sOHuzR6GFMgstpYPR0vGW0tJC27fQ9bZfB92DbsrooNDJKpQ9AyFx9o7jJN7b1t7r+f5wMBl2LNmS7ueRzt9x5DgSW5auJJJOPfe4bpUkSRKIiIgo56lFF0BERETZwdAnIiLKEwx9IiKiPMHQJyIiyhMMfSIiojzB0CciIsoTDH0iIqI8oRVdwIkSiQT6+vpgMpmgUqlEl0NERCRLkiTB6/WiuroaanVy1/CyC/2+vj7U1dWJLoOIiEgRuru7UVtbm9RtZRf6JpMJwNhf [...]
       "text/plain": [
        "<Figure size 1200x1200 with 1 Axes>"
       ]
@@ -1308,7 +1308,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 17,
    "metadata": {
     "id": "8zBzSIqQt1LV",
     "outputId": "cc8b6fbf-accb-44ba-b80a-a837df398c96"
@@ -1317,16 +1317,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAGdCAYAAACPYJhkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAkJUlEQVR4nO3de1xUdf7H8fdcDzM4M9xkBnBAvOKtMEwizbL4yZbbZrq13W+ubi62mT5a5VFq7Wa41raVj0zdfeS2ZavrttVqbeVS0baLmndRQQ0UBGYAgXMGmBsz398f1KnJS4NyGL7weT4e5/FgzhwO3/G8PJwZzsxRMcYYCOGEOtIDIKQrKFjCFQqWcIWCJVyhYAlXKFjCFQqWcIWCJVzRRnoAlyoYDKK2thYmkwkqlSrSwyEXiTEGl8uF5ORkqNXn349yH2xtbS3sdnukh0G6SXV1NQYNGnTe+7kP1mQyAeh8 [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKwAAAGdCAYAAACPYJhkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAkJUlEQVR4nO3de1xUdf7H8fdcDzM4M9xkBnBAvOKtMEwizbL4yZbbZrq13W+ubi62mT5a5VFq7Wa41raVj0zdfeS2ZavrttVqbeVS0baLmndRQQ0UBGYAgXMGmBsz398f1KnJS4NyGL7weT4e5/FgzhwO3/G8PJwZzsxRMcYYCOGEOtIDIKQrKFjCFQqWcIWCJVyhYAlXKFjCFQqWcIWCJVzRRnoAlyoYDKK2thYmkwkqlSrSwyEXiTEGl8uF5ORkqNXn349yH2xtbS3sdnukh0G6SXV1NQYNGnTe+7kP1mQyAeh8 [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1342,7 +1342,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 18,
    "metadata": {
     "id": "-LXcKKOjt1LV",
     "outputId": "546a286e-9682-4f9a-c57e-b19250d88a34"
@@ -1351,16 +1351,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 19,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAGdCAYAAABHM5ovAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACtAUlEQVR4nOzdd3iUVfbA8e/0TNqk9x4ILfTQpYpixd57byuKrgXddVfX1dXV1d+6a++rYkexgkhReq+B9N77JJlMn98fgYGQQhLSgPN5Hp41M+/c951skvfMveeeo3C5XC6EEEIIIbpB2d8XIIQQQogTlwQSQgghhOg2CSSEEEII0W0SSAghhBCi2ySQEEIIIUS3SSAhhBBCiG6TQEIIIYQQ3SaBhBBCCCG6Td3fF3A0p9NJcXExPj4+KBSK/r4cIYQQ4pTkcrmor68nIiICpbL9eYcBF0gUFxcTHR3d35chhBBC [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAGdCAYAAABHM5ovAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACtAUlEQVR4nOzdd3iUVfbA8e/0TNqk9x4ILfTQpYpixd57byuKrgXddVfX1dXV1d+6a++rYkexgkhReq+B9N77JJlMn98fgYGQQhLSgPN5Hp41M+/c951skvfMveeeo3C5XC6EEEIIIbpB2d8XIIQQQogTlwQSQgghhOg2CSSEEEII0W0SSAghhBCi2ySQEEIIIUS3SSAhhBBCiG6TQEIIIYQQ3SaBhBBCCCG6Td3fF3A0p9NJcXExPj4+KBSK/r4cIYQQ4pTkcrmor68nIiICpbL9eYcBF0gUFxcTHR3d35chhBBC [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1389,7 +1389,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 19,
    "metadata": {
     "id": "mznw0XOgt1LV",
     "outputId": "7e8085bc-abd9-4592-f047-62fa1a45eb01"
@@ -1398,16 +1398,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAFUCAYAAAAOBceiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5GUlEQVR4nO3deXxU5b0/8M/sk8yWTPZlskAgIUDYlyBaQVap4i1W788F21IVS/EqbUXaWq9FhZ/aS71W0etWfrVcKlgUF0RcwKosIRAJIAgSSMhKmGRmMsns5/dHZCSSZSYzSc5MPu/XK69XZs45z3znODifPOc5zyMRBEEAERERkYhIB7oAIiIiou9jQCEiIiLRYUAhIiIi0WFAISIiItFhQCEiIiLRYUAhIiIi0WFAISIiItFhQCEiIiLRkQ90Ad/n8/lQU1MDnU4HiUQy0OUQERFRAARBgM1mQ3p6OqTS0Ps/ [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAFUCAYAAAAOBceiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5GUlEQVR4nO3deXxU5b0/8M/sk8yWTPZlskAgIUDYlyBaQVap4i1W788F21IVS/EqbUXaWq9FhZ/aS71W0etWfrVcKlgUF0RcwKosIRAJIAgSSMhKmGRmMsns5/dHZCSSZSYzSc5MPu/XK69XZs45z3znODifPOc5zyMRBEEAERERkYhIB7oAIiIiou9jQCEiIiLRYUAhIiIi0WFAISIiItFhQCEiIiLRYUAhIiIi0WFAISIiItFhQCEiIiLRkQ90Ad/n8/lQU1MDnU4HiUQy0OUQERFRAARBgM1mQ3p6OqTS0Ps/ [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1423,7 +1423,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 20,
    "metadata": {
     "id": "yfAO1qFrt1LV",
     "outputId": "9151ce8f-2412-415b-da73-eeec613276d8"
@@ -1432,16 +1432,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAHRCAYAAAAluXLzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABoAklEQVR4nO3deXhU5d0+8Hv2mcw+2fcEAmENq0BwRxYpVVx+2sWKtdZWS/u6dFFefau2tdDS19a+Vlyrtkq1arVaF1xxQYQQtgAStoSELGSdJZPZ5/z+CARCttnOzCTcn+vKVXLmzHO+c4rJzXOeRSIIggAiIiIiIhFIE10AEREREY1eDJtEREREJBqGTSIiIiISDcMmEREREYmGYZOIiIiIRMOwSURERESiYdgkIiIiItHIE13AmYLBIBobG6HX6yGRSBJdDhERERGdQRAEOBwO5OTkQCoduu8y6cJmY2Mj8vPz [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAHRCAYAAAAluXLzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoAklEQVR4nO3deXhU5d0+8Hv2mcw+2fcEAmENq0BwRxYpVVx+2sWKtdZWS/u6dFFefau2tdDS19a+Vlyrtkq1arVaF1xxQYQQtgAStoSELGSdJZPZ5/z+CARCttnOzCTcn+vKVXLmzHO+c4rJzXOeRSIIggAiIiIiIhFIE10AEREREY1eDJtEREREJBqGTSIiIiISDcMmEREREYmGYZOIiIiIRMOwSURERESiYdgkIiIiItHIE13AmYLBIBobG6HX6yGRSBJdDhERERGdQRAEOBwO5OTkQCoduu8y6cJmY2Mj8vPz [...]
       "text/plain": [
        "<Figure size 800x800 with 1 Axes>"
       ]
@@ -1468,7 +1468,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 21,
    "metadata": {
     "id": "bbyDCO0Qt1LV",
     "outputId": "f2a0594d-999b-4573-d008-5158f898a1c6"
@@ -1477,16 +1477,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 21,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAAGdCAYAAABNWUmMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABrWklEQVR4nO3deXicZbk/8O87+75l35M2bdK0TfeUFFmEQqmIoCgcRSgczlE4BYSKS8/RI6hYfqKCCwJHEXHhsHmKqCACWhAoXdKFdF+z78ssmX15f39MMzTNJJl5Z7J/P9eV6yKTd573mWnIPc9234IoiiKIiIgoabLJ7gAREdF0xSBKREQkEYMoERGRRAyiREREEjGIEhERScQgSkREJBGDKBERkUQMokRERBIpJrsD54pEImhra4PRaIQgCJPdHSIimmVEUYTL5UJ+fj5kstHHmlMuiLa1taGoqGiyu0FERLNc [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdEAAAGdCAYAAABNWUmMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABrWklEQVR4nO3deXicZbk/8O87+75l35M2bdK0TfeUFFmEQqmIoCgcRSgczlE4BYSKS8/RI6hYfqKCCwJHEXHhsHmKqCACWhAoXdKFdF+z78ssmX15f39MMzTNJJl5Z7J/P9eV6yKTd573mWnIPc9234IoiiKIiIgoabLJ7gAREdF0xSBKREQkEYMoERGRRAyiREREEjGIEhERScQgSkREJBGDKBERkUQMokRERBIpJrsD54pEImhra4PRaIQgCJPdHSIimmVEUYTL5UJ+fj5kstHHmlMuiLa1taGoqGiyu0FERLNc [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1502,7 +1502,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 22,
    "metadata": {
     "id": "yJ_Ueh7Rt1LV",
     "outputId": "16fe59db-4be4-4e02-d37b-3098bdfa945a"
@@ -1511,16 +1511,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 23,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp0AAAGjCAYAAABuTa5+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACvZklEQVR4nOzdd3hkZ3k34N/p08409T7a1e5qtStt02q9tgE3MMaYbiCAIZSEEDohEPIRAqEHEgiBAKEFEhwCBoztEIwpNja2V9t7X/UuTe8zZ873x0iz6ppypknPfV1ciUcz57wqKz3zvk9hVFVVQQghhBBCSB6xxV4AIYQQQghZ/yjoJIQQQggheUdBJyGEEEIIyTsKOgkhhBBCSN5R0EkIIYQQQvKOgk5CCCGEEJJ3FHQSQgghhJC8o6CTEEIIIYTkHV/sBSyWSCQwOjoKWZbBMEyxl0MIIYQQQhZRVRU+nw/1 [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp0AAAGjCAYAAABuTa5+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACvZklEQVR4nOzdd3hkZ3k34N/p08409T7a1e5qtStt02q9tgE3MMaYbiCAIZSEEDohEPIRAqEHEgiBAKEFEhwCBoztEIwpNja2V9t7X/UuTe8zZ873x0iz6ppypknPfV1ciUcz57wqKz3zvk9hVFVVQQghhBBCSB6xxV4AIYQQQghZ/yjoJIQQQggheUdBJyGEEEIIyTsKOgkhhBBCSN5R0EkIIYQQQvKOgk5CCCGEEJJ3FHQSQgghhJC8o6CTEEIIIYTkHV/sBSyWSCQwOjoKWZbBMEyxl0MIIYQQQhZRVRU+nw/1 [...]
       "text/plain": [
        "<Figure size 800x800 with 1 Axes>"
       ]
@@ -1546,7 +1546,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 23,
    "metadata": {
     "id": "60UpJMNwt1LV",
     "outputId": "1c9ff3fa-83e6-411e-9dc3-0c718ee97d39"
@@ -1555,16 +1555,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAChCAYAAABnAt39AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAABT8klEQVR4nO3dd3ykVbnA8d87vbf0XrZle+8sdWVB4IIgIKIUERRQRBAE76VaQFDwqhRBL0UUBBUEpQjLLggs23sv6XVTJjOZTJ/3/jHJbCYzyaZnsznfz4cPu++88845k+y8z5zznOdIsizLCIIgCIIgjBDFaDdAEARBEITxRQQfgiAIgiCMKBF8CIIgCIIwokTwIQiCIAjCiBLBhyAIgiAII0oEH4IgCIIgjCgRfAiCIAiCMKJE8CEIgiAIwohSjXYDuotEItTU1GA2m5EkabSbIwiCIAhCH8iyjNvtJjs7G4Wi [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAChCAYAAABnAt39AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABT8klEQVR4nO3dd3ykVbnA8d87vbf0XrZle+8sdWVB4IIgIKIUERRQRBAE76VaQFDwqhRBL0UUBBUEpQjLLggs23sv6XVTJjOZTJ/3/jHJbCYzyaZnsznfz4cPu++88845k+y8z5zznOdIsizLCIIgCIIgjBDFaDdAEARBEITxRQQfgiAIgiCMKBF8CIIgCIIwokTwIQiCIAjCiBLBhyAIgiAII0oEH4IgCIIgjCgRfAiCIAiCMKJE8CEIgiAIwohSjXYDuotEItTU1GA2m5EkabSbIwiCIAhCH8iyjNvtJjs7G4Wi [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1589,7 +1589,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 24,
    "metadata": {
     "id": "rfBkQf78t1LW",
     "outputId": "8342e4b8-2483-4aac-8a79-e88d455297e2",
@@ -1599,16 +1599,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAABj0AAAMyCAYAAAA2aQPiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzddXhk5fUH8O+4zySZuMsmm9WsuwKLu7v9sBZaKC0tFCm0SCkUt0JxpzgLLLDCuls2nmzcfTTj9/dHlkDYZGMzmcj38zw82czc+94z7CaT3POec0SCIAggIiIiIiIiIiIiIiIa5cTBDoCIiIiIiIiIiIiIiMgfmPQgIiIiIiIiIiIiIqIxgUkPIiIiIiIiIiIiIiIaE5j0ICIiIiIiIiIiIiKiMYFJDyIiIiIiIiIiIiIiGhOY9CAiIiIiIiIiIiIiojGBSQ8iIiIiIiIiIiIiIhoTmPQgIiIiIiIi [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAABj0AAAMyCAYAAAA2aQPiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzddXhk5fUH8O+4zySZuMsmm9WsuwKLu7v9sBZaKC0tFCm0SCkUt0JxpzgLLLDCuls2nmzcfTTj9/dHlkDYZGMzmcj38zw82czc+94z7CaT3POec0SCIAggIiIiIiIiIiIiIiIa5cTBDoCIiIiIiIiIiIiIiMgfmPQgIiIiIiIiIiIiIqIxgUkPIiIiIiIiIiIiIiIaE5j0ICIiIiIiIiIiIiKiMYFJDyIiIiIiIiIiIiIiGhOY9CAiIiIiIiIiIiIiojGBSQ8iIiIiIiIiIiIiIhoTmPQgIiIiIiIi [...]
       "text/plain": [
        "<Figure size 2000x2000 with 1 Axes>"
       ]
@@ -1669,7 +1669,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 25,
    "metadata": {
     "id": "AcT31Diyt1LW",
     "outputId": "cd6cc6ef-43ba-478e-b183-84eb7e003e17"
@@ -1678,16 +1678,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAFnCAYAAABqwnnlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAxQUlEQVR4nO3de3RU9b3//9fcc53J/UYSCIICIogoGG/1kkqpbbWi39baViw/rDZaEdqjHK3W3zoWlvXUVlsvbS3aUxWL56cercrxYIvt1yAQ5RIUBLkkIZkESDKTC5nJzHx+f0RHcwBLkMlkm+djrb0W89l79n7PR2Rea8/n89k2Y4wRAADAMGdPdgEAAABHg9ACAAAsgdACAAAsgdACAAAsgdACAAAsgdACAAAsgdACAAAswZnsAj6rWCympqYmZWZmymazJbscAABwFIwx6uzsVElJiez2o7uHYvnQ0tTUpLKy [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAFnCAYAAABqwnnlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAxQUlEQVR4nO3de3RU9b3//9fcc53J/UYSCIICIogoGG/1kkqpbbWi39baViw/rDZaEdqjHK3W3zoWlvXUVlsvbS3aUxWL56cercrxYIvt1yAQ5RIUBLkkIZkESDKTC5nJzHx+f0RHcwBLkMlkm+djrb0W89l79n7PR2Rea8/n89k2Y4wRAADAMGdPdgEAAABHg9ACAAAsgdACAAAsgdACAAAsgdACAAAsgdACAAAsgdACAAAswZnsAj6rWCympqYmZWZmymazJbscAABwFIwx6uzsVElJiez2o7uHYvnQ0tTUpLKy [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1722,7 +1722,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1737,7 +1737,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 27,
    "metadata": {
     "id": "yjKX9Pbbt1LW",
     "outputId": "14caae01-b1b0-4775-a00e-a9e4f30fdf73"
@@ -1746,16 +1746,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 31,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAKRCAYAAAAbCWICAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xb93kv/s9Z2JvgXqBIbWpLlO3YmXb2aOzWWXVGkzQ3bdOMtunNbdKMpk1+vW3S5Gbv0Syn2bEzbCfelqhJbUqiuDeJvYFzzu8PiBApgiTGOcAB+bxfr7xikcDBIQgCz/l+n8HIsiyDEEIIIYQQFbCVPgFCCCGEELJ+UbBJCCGEEEJUQ8EmIYQQQghRDQWbhBBCCCFENRRsEkIIIYQQ1VCwSQghhBBCVEPBJiGEEEIIUQ0Fm4QQQgghRDV8pU/gZpIkYWJiAlarFQzDVPp0CCGEEELITWRZRigU [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAKRCAYAAAAbCWICAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xb93kv/s9Z2JvgXqBIbWpLlO3YmXb2aOzWWXVGkzQ3bdOMtunNbdKMpk1+vW3S5Gbv0Syn2bEzbCfelqhJbUqiuDeJvYFzzu8PiBApgiTGOcAB+bxfr7xikcDBIQgCz/l+n8HIsiyDEEIIIYQQFbCVPgFCCCGEELJ+UbBJCCGEEEJUQ8EmIYQQQghRDQWbhBBCCCFENRRsEkIIIYQQ1VCwSQghhBBCVEPBJiGEEEIIUQ0Fm4QQQgghRDV8pU/gZpIkYWJiAlarFQzDVPp0CCGEEELITWRZRigU [...]
       "text/plain": [
        "<Figure size 800x800 with 1 Axes>"
       ]
@@ -1786,7 +1786,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 28,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -1800,7 +1800,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 29,
    "metadata": {
     "id": "IS5Gcxgct1LW",
     "outputId": "b8dbb05f-4ca9-4884-83ac-a7c169a9830a"
@@ -1809,16 +1809,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 33,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAFmCAYAAAC/V5rzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlV0lEQVR4nO3df3RU9Z3/8dfk15CQzOT3L5kExApomq+KNYw/WJRUFlyqa9zTo1TFL8uKJ2IF2mXzlVbhuzZ89RRc2YW6tYuelUhLD5T1J0XQeKyJ0pgYwJIKBRIMCVXMTAhkEsjn+4dlykhQJgl8yOT5OOeew3w+937m/Zlo7uvc+dwbhzHGCAAAwJIo2wUAAIChjTACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArIoJZ+fHHntMixcvDmkbM2aMdu3aJUmaNGmSKisr [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAFmCAYAAAC/V5rzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlV0lEQVR4nO3df3RU9Z3/8dfk15CQzOT3L5kExApomq+KNYw/WJRUFlyqa9zTo1TFL8uKJ2IF2mXzlVbhuzZ89RRc2YW6tYuelUhLD5T1J0XQeKyJ0pgYwJIKBRIMCVXMTAhkEsjn+4dlykhQJgl8yOT5OOeew3w+937m/Zlo7uvc+dwbhzHGCAAAwJIo2wUAAIChjTACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArIoJZ+fHHntMixcvDmkbM2aMdu3aJUmaNGmSKisr [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1834,7 +1834,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 30,
    "metadata": {
     "id": "nwUGucQ1t1LW",
     "outputId": "26c5aede-c587-4d88-cfe0-30ecaec9ede3"
@@ -1843,16 +1843,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 34,
+     "execution_count": 30,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAKTCAYAAAD1xWeKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAC1YklEQVR4nOzdd3hc1bU34N+Z3pt6by5yL7IlG0zHYJMChOoACQk3kEZCCCH1Jibhfk5yCZc0ShqENCAEU0INxcbgIhfZli1LVhv1Or3X8/0hW1i2yvRzZma9z6PH9mh0ZsmWZ9bsvfZaDMuyLAghhBBCspCA6wAIIYQQQrhCiRAhhBBCshYlQoQQQgjJWpQIEUIIISRrUSJECCGEkKxFiRAhhBBCshYlQoQQQgjJWiKuA0iEcDiMwcFBqNVqMAzDdTiEEEII4RDLsnA4HCguLoZAMPuaT0YkQoODgygrK+M6DEII [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAKTCAYAAAD1xWeKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC1YklEQVR4nOzdd3hc1bU34N+Z3pt6by5yL7IlG0zHYJMChOoACQk3kEZCCCH1Jibhfk5yCZc0ShqENCAEU0INxcbgIhfZli1LVhv1Or3X8/0hW1i2yvRzZma9z6PH9mh0ZsmWZ9bsvfZaDMuyLAghhBBCspCA6wAIIYQQQrhCiRAhhBBCshYlQoQQQgjJWpQIEUIIISRrUSJECCGEkKxFiRAhhBBCshYlQoQQQgjJWiKuA0iEcDiMwcFBqNVqMAzDdTiEEEII4RDLsnA4HCguLoZAMPuaT0YkQoODgygrK+M6DEII [...]
       "text/plain": [
        "<Figure size 800x800 with 1 Axes>"
       ]
@@ -1877,7 +1877,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 31,
    "metadata": {
     "id": "xfMx6gJmt1LW",
     "outputId": "5278dfc3-3f51-4c21-84cc-922251b1d0cb"
@@ -1886,16 +1886,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 35,
+     "execution_count": 31,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWIAAAGdCAYAAAAomHm2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACafElEQVR4nOzddXxkZ7348c8Zd4t7spvdZN1361SoAYUWb6G4S6HIvXB/cKEXKRcpXNylQCmlLaVQL3VZ981K3H3c7fz+mGQ2k0ySiW2y2+f9eu2LzciZM6H7nWee8xVJlmUZQRAEYdEoFvsEBEEQXulEIBYEQVhkIhALgiAsMhGIBUEQFpkIxIIgCItMBGJBEIRFJgKxIAjCIhOBWBAEYZGpFvsExksmk/T09GA2m5EkabFPRxAEIYMsy/h8PkpLS1Eo5mctu+QCcU9PDxUVFYt9GoIgCFPq7OykvLx8Xo615AKx [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWIAAAGdCAYAAAAomHm2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACafElEQVR4nOzddXxkZ7348c8Zd4t7spvdZN1361SoAYUWb6G4S6HIvXB/cKEXKRcpXNylQCmlLaVQL3VZ981K3H3c7fz+mGQ2k0ySiW2y2+f9eu2LzciZM6H7nWee8xVJlmUZQRAEYdEoFvsEBEEQXulEIBYEQVhkIhALgiAsMhGIBUEQFpkIxIIgCItMBGJBEIRFJgKxIAjCIhOBWBAEYZGpFvsExksmk/T09GA2m5EkabFPRxAEIYMsy/h8PkpLS1Eo5mctu+QCcU9PDxUVFYt9GoIgCFPq7OykvLx8Xo615AKx [...]
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -1911,7 +1911,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 36,
+   "execution_count": 32,
    "metadata": {
     "id": "28VU40f9t1LW",
     "outputId": "45585067-de13-4e02-8147-053ef0115d2d"
@@ -1920,16 +1920,16 @@
     {
      "data": {
       "text/plain": [
-       "<AxesSubplot: >"
+       "<Axes: >"
       ]
      },
-     "execution_count": 36,
+     "execution_count": 32,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaYAAAKTCAYAAABSLqyAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xb1dkH8N+92nt47x07HkkcJ86GEMLeu2GvAqWM0gKFtrxA4YX2LQXKKmWVUSCMsjdhZMdOnOmVeO+tvdd9/5CtWLYkS7Zsyfb5fj79fBrpSjoOzn10znnO81AMwzAgCIIgiChBR3oABEEQBDEaCUwEQRBEVCGBiSAIgogqJDARBEEQUYUEJoIgCCKqkMBEEARBRBUSmAiCIIiowo70AMZyuVzo7u6GRCIBRVGRHg5BEAQRBgzDQK/XIzk5GTQdeE4UdYGpu7sbaWlpkR4GQRAEMQ06OjqQmpoa [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaYAAAKTCAYAAABSLqyAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3xb1dkH8N+92nt47x07HkkcJ86GEMLeu2GvAqWM0gKFtrxA4YX2LQXKKmWVUSCMsjdhZMdOnOmVeO+tvdd9/5CtWLYkS7Zsyfb5fj79fBrpSjoOzn10znnO81AMwzAgCIIgiChBR3oABEEQBDEaCUwEQRBEVCGBiSAIgogqJDARBEEQUYUEJoIgCCKqkMBEEARBRBUSmAiCIIiowo70AMZyuVzo7u6GRCIBRVGRHg5BEAQRBgzDQK/XIzk5GTQdeE4UdYGpu7sbaWlpkR4GQRAEMQ06OjqQmpoa [...]
       "text/plain": [
        "<Figure size 800x800 with 1 Axes>"
       ]
@@ -1954,7 +1954,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 37,
+   "execution_count": 33,
    "metadata": {
     "id": "5xOVyzXCt1LW"
    },
@@ -1976,7 +1976,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 38,
+   "execution_count": 34,
    "metadata": {
     "id": "tM1F5d0Vt1LW",
     "outputId": "75abad9b-9442-4279-d66d-a0cd5fb97198"
@@ -1984,7 +1984,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAB8sAAAadCAYAAABQx6xgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVhU1f8H8PfMwMywDfsqiywKbrhrWO6mlmmmmZWVpqmZmmuprVqZ2qKVmZm/MvumaZpa2Wq5KyqiKG4oCoIgIMuwM8DM+f2BTI7sCAww79fzzPM4555753Ovw2fuvefccyRCCAEiIiIiIiIiIiIiIiIiIiITIjV2AERERERERERERERERERERA2NjeVERERERERERERERERERGRy2FhOREREREREREREREREREQmh43lRERERERERERERERERERkcthYTkREREREREREREREREREJoeN5URERERE [...]
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAB8sAAAadCAYAAABQx6xgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVhU1f8H8PfMwMywDfsqiywKbrhrWO6mlmmmmZWVpqmZmmuprVqZ2qKVmZm/MvumaZpa2Wq5KyqiKG4oCoIgIMuwM8DM+f2BTI7sCAww79fzzPM4555753Ovw2fuvefccyRCCAEiIiIiIiIiIiIiIiIiIiITIjV2AERERERERERERERERERERA2NjeVERERERERERERERERERGRy2FhOREREREREREREREREREQmh43lRERERERERERERERERERkcthYTkREREREREREREREREREJoeN5URERERE [...]
       "text/plain": [
        "<Figure size 2000x2000 with 95 Axes>"
       ]
@@ -1999,7 +1999,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 39,
+   "execution_count": 35,
    "metadata": {
     "id": "8U3S1PUbt1LW",
     "outputId": "cfb8d229-ffdf-473f-d516-6aa136e41a60",
@@ -2169,7 +2169,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 40,
+   "execution_count": 41,
    "metadata": {},
    "outputs": [
     {
@@ -2224,7 +2224,13 @@
     "  if (x === 'france_regions') {\n",
     "    return [x, 'France (regions)'];\n",
     "  }\n",
-    "  return [x, x.split('_').map((e) => e[0].toUpperCase() + e.slice(1)).join(' ')];\n",
+    "  return [\n",
+    "    x,\n",
+    "    x\n",
+    "      .split('_')\n",
+    "      .map(e => e[0].toUpperCase() + e.slice(1))\n",
+    "      .join(' '),\n",
+    "  ];\n",
     "});\n",
     "\n",
     "export default countries;\n",
@@ -2240,6 +2246,39 @@
     "print(\"TypeScript code written to src/countries.ts\")"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "id": "Fb58eGlIt1LW"
+   },
+   "source": [
+    "## Output JSON for docs site"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "JSON list of countries written to /docs/data/countries.json\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Generate country items\n",
+    "countries_json = \"{\\n  \\\"countries\\\": [\\n    \\\"\" + \"\\\",\\n    \\\"\".join([country.replace(\"_\", \" \").title() for country in countries]) + \"\\\"\\n  ]\\n}\\n\"\n",
+    "\n",
+    "# Write to a file\n",
+    "with open(\"../../../../docs/data/countries.json\", \"w\") as file:\n",
+    "    file.write(countries_json)\n",
+    "\n",
+    "print(\"JSON list of countries written to /docs/data/countries.json\")"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -2267,7 +2306,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.11.4"
+   "version": "3.11.5"
   },
   "vscode": {
    "interpreter": {