Last active
May 29, 2024 19:22
-
-
Save fomightez/6ff9773e9526c391488f883c6e331d77 to your computer and use it in GitHub Desktop.
Seaborn pointplot with error bars - for SO https://stackoverflow.com/q/78543170/8508004 , developed in sessions from https://github.com/fomightez/3Dscatter_plot_mod_playground-binder
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# SO https://stackoverflow.com/q/78543170/8508004\n", | |
| "\n", | |
| "\n", | |
| "----\n", | |
| " \n", | |
| "---- \n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# JohanC's suggestiom for https://stackoverflow.com/q/78543170/8508004\n", | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "\n", | |
| "# to generate mock data use guesstimations from M.A.\n", | |
| "y_ranges = [\n", | |
| " [(45, 50), (50, 55), (52, 58), (48, 53), (47, 56)],\n", | |
| " [(55, 60), (60, 65), (62, 68), (58, 63), (57, 66)],\n", | |
| " [(75, 80), (80, 85), (82, 88), (78, 83), (77, 86)]\n", | |
| "]\n", | |
| "# generate mock data\n", | |
| "sig_factor_multiplier = 8\n", | |
| "avgs_less_than1year = [np.mean(x) for x in y_ranges[0]]\n", | |
| "avgs_greater_than1year = [np.mean(x) for x in y_ranges[1]] \n", | |
| "avgs_at_most_primary = [np.mean(x) for x in y_ranges[2]]\n", | |
| "err_range_less_than1year = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[0]]\n", | |
| "err_range__greater_than1year = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[1]] \n", | |
| "err_range__at_most_primary = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[2]]\n", | |
| "hospitals = [\"a\",\"b\",\"c\",\"d\",\"e\"]\n", | |
| "def make_values_with_mean_covering_range(mu_x, sigma_x, number_values):\n", | |
| " return np.random.normal(mu_x, sigma_x, number_values) # based on https://stackoverflow.com/a/57335302/8508004\n", | |
| "\n", | |
| "\n", | |
| "# Generate dataframe with mock data values and category labels\n", | |
| "# first, make a list of lists with each sample probability for each hospital for under year, over, at most primary\n", | |
| "list_o_data = []\n", | |
| "groupdata_and_labels = [(avgs_less_than1year,err_range_less_than1year,\"Primary +\\nbooster < 1 yr\"),(avgs_greater_than1year,err_range__greater_than1year,\"Primary +\\nbooster >= 1 yr\"),(avgs_at_most_primary,err_range__at_most_primary,\"At most\\nprimary\")]\n", | |
| "for grp_ind,gdnl in enumerate(groupdata_and_labels):\n", | |
| " for hosp_indx,hospital in enumerate(hospitals):\n", | |
| " the_group_label = gdnl[2]\n", | |
| " the_prob_values = make_values_with_mean_covering_range(gdnl[0][hosp_indx], gdnl[1][hosp_indx], 1000)\n", | |
| " for pv in the_prob_values:\n", | |
| " list_o_data.append([hospital,the_group_label,pv])\n", | |
| "df_labels = ['hospital', 'Groups','Probability hospital (%)']\n", | |
| "df = pd.DataFrame.from_records(list_o_data, columns=df_labels)\n", | |
| "## ALL THAT ABOVE WAS ONLY TO MAKE DATAFRAME ##-------------------------------------------------## ALL THAT ABOVE WAS ONLY TO MAKE DATAFRAME ##\n", | |
| "\n", | |
| "\n", | |
| "#With the dataframe in hand, Seaborn will happily make the plot\n", | |
| "import seaborn as sns\n", | |
| "p = sns.pointplot(\n", | |
| " data=df, x=\"Groups\", y=\"Probability hospital (%)\",\n", | |
| " capsize=0, legend=False, linewidth = 1.78, \n", | |
| " linestyle=\"none\", hue=\"hospital\", dodge=.34 ,markers=[\"o\", \"s\",\"^\",\"D\",\"P\"], #marker styles based on https://seaborn.pydata.org/tutorial/properties.html\n", | |
| "); # this based on examples in https://seaborn.pydata.org/generated/seaborn.pointplot.html" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "That above is default from Seaborn using the dataframe and specifying some settings when calling the `sns.pointplot`. \n", | |
| "We can customize further to make it look more like the example M.A made, but using original colors." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# JohanC's suggestiom for https://stackoverflow.com/q/78543170/8508004\n", | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "#import matplotlib.pyplot as plt; NOT NEEDED ONCE I ADDED LINE BREAKS IN COLUMN LABEL, see below\n", | |
| "\n", | |
| "# to generate mock data use guesstimations from M.A.\n", | |
| "y_ranges = [\n", | |
| " [(45, 50), (50, 55), (52, 58), (48, 53), (47, 56)],\n", | |
| " [(55, 60), (60, 65), (62, 68), (58, 63), (57, 66)],\n", | |
| " [(75, 80), (80, 85), (82, 88), (78, 83), (77, 86)]\n", | |
| "]\n", | |
| "# generate mock data\n", | |
| "sig_factor_multiplier = 8\n", | |
| "avgs_less_than1year = [np.mean(x) for x in y_ranges[0]]\n", | |
| "avgs_greater_than1year = [np.mean(x) for x in y_ranges[1]] \n", | |
| "avgs_at_most_primary = [np.mean(x) for x in y_ranges[2]]\n", | |
| "err_range_less_than1year = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[0]]\n", | |
| "err_range__greater_than1year = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[1]] \n", | |
| "err_range__at_most_primary = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[2]]\n", | |
| "hospitals = [\"a\",\"b\",\"c\",\"d\",\"e\"]\n", | |
| "def make_values_with_mean_covering_range(mu_x, sigma_x, number_values):\n", | |
| " return np.random.normal(mu_x, sigma_x, number_values) # based on https://stackoverflow.com/a/57335302/8508004\n", | |
| "\n", | |
| "\n", | |
| "# Generate dataframe with mock data values and category labels\n", | |
| "# first, make a list of lists with each sample probability for each hospital for under year, over, at most primary\n", | |
| "list_o_data = []\n", | |
| "groupdata_and_labels = [(avgs_less_than1year,err_range_less_than1year,\"Primary +\\nbooster < 1 yr\"),(avgs_greater_than1year,err_range__greater_than1year,\"Primary +\\nbooster >= 1 yr\"),(avgs_at_most_primary,err_range__at_most_primary,\"At most\\nprimary\")]\n", | |
| "for grp_ind,gdnl in enumerate(groupdata_and_labels):\n", | |
| " for hosp_indx,hospital in enumerate(hospitals):\n", | |
| " the_group_label = gdnl[2]\n", | |
| " the_prob_values = make_values_with_mean_covering_range(gdnl[0][hosp_indx], gdnl[1][hosp_indx], 1000)\n", | |
| " for pv in the_prob_values:\n", | |
| " list_o_data.append([hospital,the_group_label,pv])\n", | |
| "df_labels = ['hospital', 'Groups','Probability hospital (%)']\n", | |
| "df = pd.DataFrame.from_records(list_o_data, columns=df_labels)\n", | |
| "## ALL THAT ABOVE WAS ONLY TO MAKE DATAFRAME ##-------------------------------------------------## ALL THAT ABOVE WAS ONLY TO MAKE DATAFRAME ##\n", | |
| "\n", | |
| "#plt.figure(figsize=(7.6, 6)) # similar to https://stackoverflow.com/a/50671064/8508004 for setting plot size ; NOT NEEDED ONCE I ADDED LINE BREAKS IN COLUMN LABEL\n", | |
| "\n", | |
| "#With the dataframe in hand, Seaborn will happily make the plot\n", | |
| "import seaborn as sns\n", | |
| "my_palette = {\n", | |
| " 'a': 'black',\n", | |
| " 'b': 'tab:blue',\n", | |
| " 'c': 'tab:cyan',\n", | |
| " 'd': 'gold',\n", | |
| " 'e': 'tab:red',\n", | |
| "}\n", | |
| "p = sns.pointplot(\n", | |
| " data=df, x=\"Groups\", y=\"Probability hospital (%)\",\n", | |
| " capsize=0, legend=False, linewidth = 1.78, palette = my_palette,\n", | |
| " linestyle=\"none\", hue=\"hospital\", dodge=.34 ,markers=[\"o\", \"s\",\"^\",\"D\",\"P\"], #marker styles based on https://seaborn.pydata.org/tutorial/properties.html\n", | |
| ") # this based on examples in https://seaborn.pydata.org/generated/seaborn.pointplot.html\n", | |
| "\n", | |
| "# Customize the plot some\n", | |
| "# Set the y-axis label and ticks\n", | |
| "#a.set_ylabel(\"Probability hospital (%)\") # works but made it unnecessary by putting label in dataframe column name\n", | |
| "p.set_xlabel(None) # remove the 'Groups' label below categories\n", | |
| "p.set_yticks(np.arange(0, 101, 25))\n", | |
| "p.set_ylim(40, 91)\n", | |
| "\n", | |
| "# internal text-label in the top-left corner\n", | |
| "p.text(0.03, 0.95, \"At least 60 yrs\", transform=p.transAxes,\n", | |
| " fontsize=12, verticalalignment='top', bbox=dict(facecolor='white', edgecolor='none'));" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "And more like the provided original by fixing the axis range and the markers:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGzCAYAAADJ3dZzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABMAklEQVR4nO3dd1gU1/4G8HcBaQssCIgSFRRFUcFeUBFrbCGxdxEbatRYY+L9xaBpGtPUJOo1VzFeMXZT9EZjbzFW7Iii2LECi4AgC+f3B2HiSnEXdt1leD/Ps8+zc+bs7Bccdl/PnJlRCCEEiIiIiGTKwtQFEBERERkTww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRrDDhEREcmaScPOgQMHEBISAk9PTygUCvz8889a64UQ+PDDD1GpUiXY2dmhY8eOuHLlilafxMREDB48GE5OTnB2dsbIkSORmpr6Cn8KIiIiMmcmDTtpaWmoX78+vv/++wLXz58/H4sWLcLSpUtx9OhRKJVKdO7cGRkZGVKfwYMH48KFC9i5cye2bt2KAwcOIDw8/FX9CERERGTmFOZyI1CFQoEtW7agR48eAHJHdTw9PTFt2jRMnz4dAKBWq+Hh4YGVK1diwIABiImJQZ06dXD8+HE0adIEALB9+3Z069YNt2/fhqenp6l+HCIiIjITVqYuoDDx8fG4d+8eOnbsKLWpVCo0b94cR44cwYABA3DkyBE4OztLQQcAOnbsCAsLCxw9ehQ9e/YscNuZmZnIzMyUlnNycpCYmAhXV1coFArj/VBERERkMEIIPHnyBJ6enrCwKPxgldmGnXv37gEAPDw8tNo9PDykdffu3UOFChW01ltZWaF8+fJSn4LMnTsXc+bMMXDFREREZAq3bt1C5cqVC11vtmHHmGbOnImpU6dKy2q1GlWrVsWtW7fg5ORkwsqIiIhIVykpKahSpQocHR2L7Ge2YadixYoAgPv376NSpUpS+/3799GgQQOpz4MHD7Rep9FokJiYKL2+IDY2NrCxscnX7uTkxLBDRERUyrxsCorZXmenWrVqqFixInbv3i21paSk4OjRowgMDAQABAYGIjk5GSdPnpT67NmzBzk5OWjevPkrr5mIiIjMj0lHdlJTUxEXFyctx8fH4/Tp0yhfvjyqVq2KyZMn45NPPkHNmjVRrVo1zJo1C56entIZW35+fujSpQtGjx6NpUuXIisrCxMmTMCAAQN4JhYREREBMHHYOXHiBNq1ayct582jGTZsGFauXIkZM2YgLS0N4eHhSE5ORuvWrbF9+3bY2tpKr4mKisKECRPQoUMHWFhYoHfv3li0aNEr/1mIiIjIPJnNdXZMKSUlBSqVCmq1mnN2iIiISgldv7/Nds4OERERkSEw7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHslAKzZ8+GQqEwdRlERESlEsOOESxevBgKhQLNmzcvcP3Fixcxe/ZsXL9+/dUWVkKLFy/GypUr9XrNkydPMGPGDFSrVg02NjZ47bXX0KdPH6Snp2v1S05ORnh4ONzd3aFUKtGuXTucOnXKgNUTEVFZZWXqAuQoKioK3t7eOHbsGOLi4lCjRg2t9RcvXsScOXPQtm1beHt7m6bIYli8eDHc3NwQFhamU3+1Wo3g4GDcvn0b4eHhqFGjBh4+fIiDBw8iMzMT9vb2AICcnBx0794dZ86cwbvvvgs3NzcsXrwYbdu2xcmTJ1GzZk0j/lRERCR3DDsGFh8fjz///BObN2/GmDFjEBUVhYiICFOXZRIzZ87EjRs3cOrUKVSrVk1qf++997T6bdy4EX/++Sc2bNiAPn36AAD69esHX19fREREYM2aNUapLycnB8+ePYOtra1Rtk9EROaBh7EMLCoqCi4uLujevTv69OmDqKgorfUrV65E3759AQDt2rWDQqGAQqHAvn379H6v1atXo3HjxrCzs0P58uUxYMAA3Lp1S6vPwYMH0bdvX1StWhU2NjaoUqUKpkyZgqdPn2r1u3fvHoYPH47KlSvDxsYGlSpVwltvvSUdavP29saFCxewf/9+qea2bdsWWltycjIiIyMRHh6OatWq4dmzZ8jMzCyw78aNG+Hh4YFevXpJbe7u7ujXrx9++eWXQl8HAMOGDYObmxuysrLyrXv99ddRq1YtaVmhUGDChAmIiopC3bp1YWNjg+3btwMA1q5di8aNG8PR0RFOTk7w9/fHwoULC31fIiIqPRh2DCwqKgq9evWCtbU1Bg4ciCtXruD48ePS+jZt2uCdd94BAPzrX//Cf//7X/z3v/+Fn5+fXu/z6aefIjQ0FDVr1sTXX3+NyZMnY/fu3WjTpg2Sk5Olfhs2bEB6ejrGjRuHb7/9Fp07d8a3336L0NBQre317t0bW7ZswfDhw7F48WK88847ePLkCW7evAkAWLBgASpXrozatWtLNf/f//1fofUdOnQIGRkZqFGjBvr06QN7e3vY2dmhVatWOH36tFbf6OhoNGrUCBYW2rtjs2bNkJ6ejsuXLxf6PkOHDsXjx4+xY8cOrfZ79+5hz549GDJkiFb7nj17MGXKFPTv3x8LFy6Et7c3du7ciYEDB8LFxQWff/455s2bh7Zt2+Lw4cOFvi8REZUigoRarRYAhFqtLtF2Tpw4IQCInTt3CiGEyMnJEZUrVxaTJk3S6rdhwwYBQOzdu1en7UZERIjn/6muX78uLC0txaeffqrV79y5c8LKykqrPT09Pd/25s6dKxQKhbhx44YQQoikpCQBQHzxxRdF1lG3bl0RHBysU81ff/21ACBcXV1Fs2bNRFRUlFi8eLHw8PAQLi4u4u7du1JfpVIpRowYkW8b27ZtEwDE9u3bC32f7OxsUblyZdG/f/98769QKMS1a9ekNgDCwsJCXLhwQavvpEmThJOTk9BoNDr9bEREZB50/f7myI4BRUVFwcPDA+3atQOQe9ikf//+WLt2LbKzsw32Pps3b0ZOTg769euHR48eSY+KFSuiZs2a2Lt3r9TXzs5Oep6WloZHjx6hZcuWEEIgOjpa6mNtbY19+/YhKSnJIDWmpqYCyP0d7N69G4MGDcK4cePw888/IykpCd9//73U9+nTp7Cxscm3jby5NC8ecnuehYUFBg8ejF9//RVPnjyR2qOiotCyZUutuUIAEBwcjDp16mi1OTs7Iy0tDTt37tT/ByUiIrPHsGMg2dnZWLt2Ldq1a4f4+HjExcUhLi4OzZs3x/3797F7926DvdeVK1cghEDNmjXh7u6u9YiJicGDBw+kvjdv3kRYWBjKly8PBwcHuLu7Izg4GEDu2VIAYGNjg88//xy///47PDw80KZNG8yfPx/37t0rdo15ISskJAQODg5Se4sWLVCtWjX8+eefWn0LmpeTkZGhta3ChIaG4unTp9iyZQsAIDY2FidPnsTQoUPz9X0x/ADA22+/DV9fX3Tt2hWVK1fGiBEjpLk8RERU+vFsLAPZs2cPEhISsHbtWqxduzbf+qioKLz++usGea+cnBwoFAr8/vvvsLS0zLc+L1xkZ2ejU6dOSExMxHvvvYfatWtDqVTizp07CAsLQ05OjvSayZMnIyQkBD///DN27NiBWbNmYe7cudizZw8aNmyod42enp4AAA8Pj3zrKlSooDWCVKlSJSQkJOTrl9eWt63C1KlTB40bN8bq1asRGhqK1atXw9raGv369cvXt6DgVKFCBZw+fRo7duzA77//jt9//x2RkZEIDQ3Fjz/+WPQPSkREZo9hx0CioqJQoUIFrcMzeTZv3owtW7Zg6dKlsLOzK/HVkH18fCCEQLVq1eDr61tov3PnzuHy5cv48ccftSYkF3a4xsfHB9OmTcO0adNw5coVNGjQAF999RVWr14NAHrV3bhxYwDAnTt38q27e/cuateuLS03aNAABw8eRE5OjtYk5aNHj8Le3r7InzFPaGgopk6dioSEBKxZswbdu3eHi4uLzvVaW1sjJCQEISEhyMnJwdtvv41///vfmDVrVr7rJBERUenCw1gG8PTpU2zevBlvvPEG+vTpk+8xYcIEPHnyBL/++isAQKlUAoDWWVP66NWrFywtLTFnzhwIIbTWCSHw+PFjAJBGfZ7vI4TId0p1enq6dMgoj4+PDxwdHbUOLymVSp1rrlWrFurXr49ffvkFjx49ktr/+OMP3Lp1C506dZLa+vTpg/v372Pz5s1S26NHj7BhwwaEhIQUOJ/nRQMHDoRCocCkSZNw7dq1fGdhFSXv95XHwsICAQEBAFDkae9ERFQ6cGTHAPImx7755psFrm/RogXc3d0RFRWF/v37o0GDBrC0tMTnn38OtVoNGxsbtG/fHhUqVNDp/Xx8fPDJJ59g5syZuH79Onr06AFHR0fEx8djy5YtCA8Px/Tp01G7dm34+Phg+vTpuHPnDpycnLBp06Z8k5AvX76MDh06oF+/fqhTpw6srKywZcsW3L9/HwMGDJD6NW7cGEuWLMEnn3yCGjVqoEKFCmjfvn2hdX7zzTfo1KkTWrdujTFjxkCtVuPrr7+Gr68vxo0bJ/Xr06cPWrRogeHDh+PixYvSFZSzs7MxZ84cnX4n7u7u6NKlCzZs2ABnZ2d0795dp9cBwKhRo5CYmIj27dujcuXKuHHjBr799ls0aNBA70sCEBGRGTL2aWGlQUlPPQ8JCRG2trYiLS2t0D5hYWGiXLly4tGjR0IIIX744QdRvXp1YWlp+dLT0F889TzPpk2bROvWrYVSqRRKpVLUrl1bjB8/XsTGxkp9Ll68KDp27CgcHByEm5ubGD16tDhz5owAICIjI4UQQjx69EiMHz9e1K5dWyiVSqFSqUTz5s3F+vXrtd7v3r17onv37sLR0VEA0Ok09J07d4oWLVoIW1tbUb58eTF06FCRkJCQr19iYqIYOXKkcHV1Ffb29iI4OFgcP378pdt/3vr16wUAER4eXuB6AGL8+PH52jdu3Chef/11UaFCBWFtbS2qVq0qxowZU2CdRERkPnT9/lYI8cJxkDIoJSUFKpUKarUaTk5Opi6HiumXX35Bjx49cODAAQQFBZm6HCIiMjJdv785Z4dk44cffkD16tXRunVrU5dCRERmhHN2qNRbu3Ytzp49i23btmHhwoUlPtuNiIjkhWGHSr2BAwfCwcEBI0eOxNtvv23qcoiIyMww7FCpx2lnRERUFM7ZISIiIllj2CEiIiJZY9ghIiIiWWPYISIiIllj2CEiIiJZY9ghIiIiWWPYISIiIlnjdXaIiIhekRRNNmJSnwIA/Bzs4GRlaeKKygaO7BAREb0iMalP8VZ0HN6KjpNCDxkfww4RERHJGsMOERERyRrDDhEREckaww4RERHJGsMOERERyRpPPSciIiqBlIwsxN57AgCoVdERTrblCu37NDunwOdkXBzZISIiKoHYe0/Qd+kR9F16RAo9BUnVZGPO1bvS8pyrd5GqyX4VJZZ5DDtERERGlqrJxqCz1xCTliG1xaRlYNDZaww8rwDDDhERkRHlBZ1j6rR8646p0xh4XgGGHSIiIiMpKujkYeAxPoYdIiIiI9Al6ORh4DEuhh0iIiKSNYUQQpi6CFNLSUmBSqWCWq2Gk5OTqcshIqJSIPiLvVA/zYImOwepmbkjMg42lrCytIDKrhz2v9tO59GdZiol1gRUhwPvgq4XXb+/ObJDRERUDOqnWUhOz5KCDgCkZmYjOT0L6qdZAAAHK0usCaiOZiplodth0DE+hh0iIiIjKirwGCroZD95gvSTJ5F+8iSynxR+rZ+yimGHiIjIyPICj5/SVmrzU9oWHXSy1UD6odxHtrrI7Wdevowbg4fgxuAhyLx82ZClywLDDhER0SvgYGWJCB9PaTnCx7PoEZ3Mc8DNoNxH5rlXUKF8MewQERG9InaWFgU+J+Pib5qIiIhkjXc9JyIiKgaVXe7dzQs79ZzMB8MOERFRMex/tx0A4Pj1RPRdegQAEDm8GZp6lzdlWVQAHsYiIiIiWWPYISIiMkfP3+CANzsoER7GIiIiekX8HOzwS8Ma0vMiZRzVfq4MMmJl8saRHSIiolfEycoSzZ0d0NzZAU5FXWNHCEC94p9l9QqO7pQAww4REZG5SdsOPIv5Z/lZTG4bFQvDDhERkTkRAng0O3/7o9kc3SkmztkhIiJ6gVqtxrlzubdo8Pf3h0qlKrRvrYqO2DA2UHpeYmnbgYxj+dszjuWuc+ha8vcoYxh2iIiIXnDu3DkEBeVOCD548CBat25daF8n23KGvbZO8tKi1z0XdlIPH8bdqdMgNBqp7Vb4GCisrPDaN19D2bKl4eoqxXgYi4iIyJy4TAAsygOK50aJFI65bS4TtbomRa1BtlqNnLQ0qS0nLQ3ZajUSV0e9qorNHsMOERGROVF2AnwfA1X+909blf/ltik7anV1GdC/0M0Uta6sYdghIiIqpZRBQbANCMjXbhsQAGUQr8uTh2GHiIiolFIoFHCfMD5fu/uE8VAoFCaoyDwx7BAREZViyqAgWPv4SMvWPj4c1XkBww4REdFzNBoNtm3bJi2PGzcOK1asgOa5M57MiUKhgHOvXtKyc69eHNV5AcMOERHR3zQaDfr164d58+ZJbefPn8fIkSPRr18/sw08tvUDCnxOuRh2iIiI/rZq1Sps2bKlwHVbtmzBqlWrXl0xNv5A1YO5Dxv/Irs+P5LDUZ38GHaIiIj+tnz58hKtNyhLFWDfOvdhWfgVnOnlGHaIiIj+dvPmzRKtJ/PEsENERPS3qlWrlmg9mSeGHSIior+NHDmyROvJPJl92PH29oZCocj3GD8+9yJKbdu2zbdu7NixJq6aiIhKo9DQUPTs2bPAdT179kRoaOgrrogMwezDzvHjx5GQkCA9du7cCQDo27ev1Gf06NFafebPn2+qcomIqBSzsrLC+vXr8f7770tt9erVw/Lly7F+/XpYWVmZsDoqLrP/V3N3d9danjdvHnx8fBAcHCy12dvbo2LFiq+6NCIikiErKyt0795dutbOkiVL0Lp1axNXRSVh9iM7z3v27BlWr16NESNGaF1HICoqCm5ubqhXrx5mzpyJ9PR0E1ZJRERE5sTsR3ae9/PPPyM5ORlhYWFS26BBg+Dl5QVPT0+cPXsW7733HmJjY7F58+ZCt5OZmYnMzExpOSUlxZhlExERkQmVqrCzfPlydO3aFZ6enlJbeHi49Nzf3x+VKlVChw4dcPXqVfg8d2O0582dOxdz5swxer1ERERkeqXmMNaNGzewa9cujBo1qsh+zZs3BwDExcUV2mfmzJlQq9XS49atWwatlYiI6FWy8fWFV9RqeEWtho2vr6nLMTulZmQnMjISFSpUQPfu3Yvsd/r0aQBApUqVCu1jY2MDGxsbQ5ZHRERkMpaOjrBv3NjUZZitUhF2cnJyEBkZiWHDhmmd9nf16lWsWbMG3bp1g6urK86ePYspU6agTZs2CAjgXV+JiKh4/P39cfDgQek5lW6lIuzs2rULN2/exIgRI7Tara2tsWvXLixYsABpaWmoUqUKevfujQ8++MBElRIRkRyoVCqebi4jCiGEMHURppaSkgKVSgW1Wg0nJydTl0NEREQ60PX7u9RMUCYiIiIqDoYdIiIikjWGHSIiIpI1hh0iIiKSNYYdIiIikjWGHSIiIpI1hh0iIiKSNb0vKhgfH4+DBw/ixo0bSE9Ph7u7Oxo2bIjAwEDY2toao0YiIiKiYtM57ERFRWHhwoU4ceIEPDw84OnpCTs7OyQmJuLq1auwtbXF4MGD8d5778HLy8uYNRMRERHpTKew07BhQ1hbWyMsLAybNm1ClSpVtNZnZmbiyJEjWLt2LZo0aYLFixejb9++RimYiIiISB863S5ix44d6Ny5s04bfPz4Ma5fv47Gpejuq7xdBBERUemj6/e3TiM7ugYdAHB1dYWrq6vO/YmIiIiMqUR3Pd+2bRv27duH7OxstGrVCr179zZUXUREREQGUexTz2fNmoUZM2ZAoVBACIEpU6Zg4sSJhqyNiIiIqMR0mrMDACdOnECTJk2kZV9fX5w5cwZ2dnYAgDNnzqBt27ZISkoyTqVGxDk7REREpY+u3986j+yMHTsWkydPRnp6OgCgevXq+OqrrxAbG4tz585hyZIl8PX1LXnlRERERAakc9g5evQoKlWqhEaNGuG3337DihUrEB0djZYtWyIoKAi3b9/GmjVrjFkrEZFeUjTZOJqciqPJqUjRZJu6HCIyEZ0PY+W5du0axo0bB6VSie+++w6enp7Gqu2V4WEsInk6mpyKt6LjAAC/NKyB5s4OJq6IiAzJ4Iex8lSvXh07duxAz5490aZNG3z//fclKpSIiIjImHQOO8nJyZgxYwZCQkLwwQcfoGfPnjh69CiOHz+OFi1a4Ny5c8ask4iIiKhYdA47w4YNw9GjR9G9e3fExsZi3LhxcHV1xcqVK/Hpp5+if//+eO+994xZKxEREZHedL6o4J49exAdHY0aNWpg9OjRqFGjhrSuQ4cOOHXqFD766COjFElEZE6ynzxB5uXLAAAbX19YOjqauCIiKorOIzs1a9bEsmXLcPnyZSxdujTfnc1tbW3x2WefGbxAIiJzk3n5Mm4MHoIbg4dIoYeIzJfOYWfFihXYs2cPGjZsiDVr1mDJkiXGrIuIqMSeZucU+JyIyhadD2M1aNAAJ06cMGYtREQGk6rJxpyrd6XlOVfvoolKCQcrSxNWRUSmoNPIjp6X4iEiMqlUTTYGnb2GmLQMqS0mLQODzl5DKi8uSFTm6BR26tati7Vr1+LZs2dF9rty5QrGjRuHefPmGaQ4IiJ95QWdY+q0fOuOqdMYeIjKIJ0OY3377bd477338Pbbb6NTp05o0qQJPD09YWtri6SkJFy8eBGHDh3ChQsXMGHCBIwbN87YdRNRGZSSkYXYe08AALUqOsLJtpzW+qKCTp68wLMmoDoPaRGVETqFnQ4dOuDEiRM4dOgQ1q1bh6ioKNy4cQNPnz6Fm5sbGjZsiNDQUAwePBguLi7GrpmIyqjYe0/Qd+kRAMCGsYFo6l1eWqdL0MnDwENUtug8QRkAWrdujdatWxurFiIiIiKD0/veWERE5sjByhJrAqqjmUr50r7NVEqO6hCVIQw7RCQbugQeBh2isodhh4hkpajAw6BDVDYx7BCR7OQFHj+lrdTmp7Rl0CEqo/SaoExEZArBX+yF+mkWNM/d8mF45DFYWVpAZVcO+99tl+81DlaWiPDxxICz1wAAET6eDDpEZZROYSclJUXnDTo5ORW7GCKigqifZiE5PUurLTUzG0DRFwe0s7Qo8HlxpR4+jLtTp0FoNFLbrfAxUFhZ4bVvvoayZcsSvwcRGZ5OYcfZ2RkKhaLIPkIIKBQKZGfzyqREJE9JUWuQrVZrteWk5V7XJ3F1FMMOkZnSKezs3bvX2HUQEZk9lwH9kbpnT6HriMg86RR2goODjV0HEZHZUwYFwTYgABlnz2q12wYEQBkUZKKqiOhlij1BOT09HTdv3sx3c9CAgIASF0VEZI4UCgXcJ4zHrfAxWu3uE8a/9FA/EZmO3mHn4cOHGD58OH7//fcC13PODhHJmTIoCNY+Pnh29SoAwNrHh6M6RGZO79MTJk+ejOTkZBw9ehR2dnbYvn07fvzxR9SsWRO//vqrMWokojJOZVcOzvbl4GDzz6njDjaWcLYvB5VduSJeqYdsNZB+KPeRrS60m0KhgHOvXtKyc69eHNUhMnN6j+zs2bMHv/zyC5o0aQILCwt4eXmhU6dOcHJywty5c9G9e3dj1ElEZVjedXSOX0+U7noeObyZ1l3PC+LnYIdfGtaQnhcp8xxw8+8RmqoHAfvCb3psWz+gwOdEZJ70HtlJS0tDhQoVAAAuLi54+PAhAMDf3x+nTp0ybHVERCXgZGWJ5s4OaO7sACcDXlDw+ZEcjuoQmT+9w06tWrUQGxsLAKhfvz7+/e9/486dO1i6dCkqVapk8AKJiIiISkLvw1iTJk1CQkICACAiIgJdunRBVFQUrK2tsXLlSkPXR0RERFQieoedIUOGSM8bN26MGzdu4NKlS6hatSrc3NwMWhwRyZ9arca5c+cA5B4OV6lUJq6IiORG78NYH330EdLT06Vle3t7NGrUCEqlEh999JFBiyMCgOwnT5B+8iTST55E9pMnpi6HDOzcuXMICgpCUFCQFHoKU6uiIzaMDcSGsYGoVdHxFVVIRKWd3mFnzpw5SE1Nzdeenp6OOXPmGKQooudlXr6MG4OH4MbgIci8fNnU5ZAJOdmWQ1Pv8mjqXR5OtgY65TyPEAU/J6JST++wk3fDzxedOXMG5csXfRooEZHZyjha8HMiKvV0nrPj4uIChUIBhUIBX19frcCTnZ2N1NRUjB071ihFEhEZlRCAesU/y+oVQPlpAE8rJ5IFncPOggULIITAiBEjMGfOHK1JhNbW1vD29kZgYKBRiiQiMqq07cCzmH+Wn8Xktjl0NV1NRGQwOoedYcOGAQCqVauGli1bolw5Ax8vp1ItRZONmNSnAHKvVGvIC7gRGZUQwKPZ+dsfzQaUXTi6QyQDOs3ZSUlJkZ43bNgQT58+RUpKSoEPKptiUp/ireg4vBUdJ4UeopfRaDTYtm2btDxu3DisWLECGo3m1RWRth3IOJa/PeNY7joiKvV0GtlxcXFBQkICKlSoAGdn5wInKOdNXOZdz4lIFxqNBv369cOWLVuktvPnz2PkyJHYunUr1q9fDysrvS8Fpr/kpUWv46EsolJPp0+SPXv2SGda7d2716gFEVHZsGrVKq2g87wtW7Zg1apVGDFihPELcZmQe6dzkQWIv6/jpHAEFOUAl4kFvsTG1xdeUaul50Rk3nQKO8HBwQU+JyIqruXLl790/SsJO8pOgO/j3MCTd9fzKv8r8q7nlo6OsG/c2Pi1EZFBFGuMOCkpCcuXL0dMTO7ZC3Xq1MHw4cN5nR0i0tnNmzdLtJ6ISFd6X1TwwIED8Pb2xqJFi5CUlISkpCQsWrQI1apVw4EDB4xRIxHJUNWqVUu0nohIV3qHnfHjx6N///6Ij4/H5s2bsXnzZly7dg0DBgzA+PHjjVEjlQJPs3MKfE5UmJEjR5ZoPRGRrvQOO3FxcZg2bRosLf+5joqlpSWmTp2KuLg4gxZHpUOqJhtzrt6VludcvYtUDc/Ko6KFhoaiZ8+eBa7r2bMnQkNDX3FFRCRXeoedRo0aSXN1nhcTE4P69esbpCgqPVI12Rh09hpi0jKktpi0DAw6e63EgSf18GFcbt4Ct8LHSG23wsfgcvMWSPvzzxJtm0zPysoK69evx/vvvy+11atXD8uXL391p50TUZmg96fJO++8g0mTJiEuLg4tWrQAAPz111/4/vvvMW/ePJw9e1bqGxAQYLhKyezkBZ1j6rR8646p0zDo7DWsCagOh2JeTTkpag2y1Wqttpy03PdKXB0FZcuWxdoumQ8rKyt0794d8+bNAwAsWbIErVsXfhaUUdn4A1UP/vOciGRD77AzcOBAAMCMGTMKXKdQKHiBwTKgqKCTp6SBx2VAf6Tu2VPoOiKDslQVebo5EZVeeoed+Ph4Y9RBpYguQSdPSQKPMigItgEByHhutBAAbAMCoAwK0mtbRERUdukddry8vIxRB1E+CoUC7hPGa83ZAQD3CeMLvGUJERFRQfSeoPzjjz9q3bhvxowZcHZ2RsuWLXHjxg2DFkfmycHKEmsCqqOZSvnSvs1UyhLN21EGBcHax0datvbx4agOERHpRe+w89lnn8HOzg4AcOTIEXz33XeYP38+3NzcMGXKFIMXSOZJl8BT0qAD5I7uOPfqJS079+rFUR2Z8ff3x8GDB3Hw4EH4+3NiMBEZnt6HsW7duoUaNWoAAH7++Wf06dMH4eHhaNWqFdq2bWvo+siEUjKyEHsv98aItSo6wsm2nNb6vMBT0PwdQwSdPLb1Awp8TvKgUqlMdwYWEZUJeo/sODg44PHjxwCAP/74A506dQIA2Nra4unTp4atjkwq9t4T9F16BH2XHpFCz4vyAo+f0lZq81PaGizoANAayeGoDhER6UvvsNOpUyeMGjUKo0aNwuXLl9GtWzcAwIULF+Dt7W3o+qgUcLCyRISPp7Qc4eNpsKBDRERUUnqHne+//x6BgYF4+PAhNm3aBFdXVwDAyZMnpWvwUNljZ2lR4HMiIiJT03vOjrOzM7777rt87XPmzDFIQURERESGVKybzyQnJ2P58uXSPbLq1q2LESNGQKVSGbQ4IiIiopLS+3jDiRMn4OPjg2+++QaJiYlITEzE119/DR8fH5w6dcoYNRIREREVm94jO1OmTMGbb76JH374QborsUajwahRozB58mQcOHDA4EWSzGSrgcxzuc9t/HPvSURERGQkeoedEydOaAUdIPfOxTNmzECTJk0MWhyZRvAXe6F+mgVNdo7UNjzyGKwsLaCyK4f977Yr2RtkngNu/n0V5KoHefNFIiIyKr3DjpOTE27evInatWtrtd+6dQuOjo4GK4xMR/00C8npWVptqZnZAAq/i72fgx1+aVhDek5ERGQu9A47/fv3x8iRI/Hll1+iZcuWAIDDhw/j3Xff5annpYBarca5c7mHkPz9/Q02qdzJyhLNnR0Msi0iIiJD0jvsfPnll1AoFAgNDYVGowEAlCtXDuPGjcO8efMMXiAZ1rlz5xD09400Dx48yMv0ExGR7OkddqytrbFw4ULMnTsXV69eBQD4+PjA3t7e4MURERERlVSxrrMDAPb29rxDMRWPEAU/JyIiMgK9r7OTlpaGWbNmoWXLlqhRowaqV6+u9TCk2bNnQ6FQaD2enxidkZGB8ePHw9XVFQ4ODujduzfu379v0BrICDKOFvyciIjICPQe2Rk1ahT279+PoUOHolKlSka/C3XdunWxa9cuafn5U96nTJmCbdu2YcOGDVCpVJgwYQJ69eqFw4cPG7UmuVPZlQMAaLJz/j4LC3CwsZROPS8RIQD1in+W1SuA8tOAIvYjG19feEWtlp4TERHpQ++w8/vvv2Pbtm1o1aqVMerJx8rKChUrVszXrlarsXz5cqxZswbt27cHAERGRsLPzw9//fUXWrRo8UrqK000Gg22bdsmLY8bNw5TpkxBaGioVojMu47O8euJ6Lv0CAAgcngzNPUuX/Ii0rYDz2L+WX4Wk9vm0LXQl1g6OsK+ceOSvzcREZVJeh/GcnFxQfnyBvjS09GVK1fg6emJ6tWrY/Dgwbh58yaA3LusZ2VloWPHjlLf2rVro2rVqjhy5EiR28zMzERKSorWQ+40Gg369eundcbc+fPnMXLkSPTr1086s86ohAAezc7f/mg25+4QEZHR6B12Pv74Y3z44YdIT083Rj1amjdvjpUrV2L79u1YsmQJ4uPjERQUhCdPnuDevXuwtraGs7Oz1ms8PDxw7969Irc7d+5cqFQq6VGlShUj/hTmYdWqVdiyZUuB67Zs2YJVq1YZv4i07UDGsfztGcdy1xERERmBToexGjZsqDU3Jy4uDh4eHvD29ka5ctpzOAx5M9CuXf85tBEQEIDmzZvDy8sL69evh51d8a/SO3PmTEydOlVaTklJkX3gWb58+UvXjxgxwrhFJC8tel0Rh7KIiIiKS6ew06NHDyOXoRtnZ2f4+voiLi4OnTp1wrNnz5CcnKw1unP//v0C5/g8z8bGBjY2Nkau1rzkHf4r7nqDcJkApB8CRBYgnuS2KRwBRTnAZaLx35+IiMokncJORESEsevQSWpqKq5evYqhQ4eicePGKFeuHHbv3o3evXsDAGJjY3Hz5k0EBgaauFLzU7VqVdy+fbvI9Uan7AT4Ps4NPHk3Aq3yP94IlIiIjKrYFxV8FaZPn46QkBB4eXnh7t27iIiIgKWlJQYOHAiVSoWRI0di6tSpKF++PJycnDBx4kQEBgbyTKwCjBw5En/++WeR619Uq6IjNowNlJ4TERGVRmYddm7fvo2BAwfi8ePHcHd3R+vWrfHXX3/B3d0dAPDNN9/AwsICvXv3RmZmJjp37ozFixebuGrzFBoaiq1btxY4Sblnz54IDQ3N1+5kW84wp5sTERGZkEIInvObkpIClUoFtVoNJycnU5djNBqNBrNmzZJOP69Xr16B19kxuucPY1U9yMNYRERULLp+f+t96jmVXlZWVujevbu0vGTJEowYMeLVBh0iIqJXTO+ws3fvXmPUQURERGQUeoedLl26wMfHB5988glu3bpljJpI7mz8cw9fVT2Y+5yIiMiI9A47d+7cwYQJE7Bx40ZUr14dnTt3xvr16/Hs2TNj1EdyZKnKnadj3zr3ORERkRHpHXbc3NwwZcoUnD59GkePHoWvry/efvtteHp64p133sGZM2eMUScRERFRsZT4bKy7d+9i2bJlmDdvHqysrJCRkYHAwEAsXboUdevWNVSdRlVWzsYCcu8Wf+7cOQCAv78/VCqOrBARUelk1LOxsrKysHHjRnTr1g1eXl7YsWMHvvvuO9y/fx9xcXHw8vJC3759i108GY9KpULr1q3RunVrBh0iIioT9B7ZmThxIn766ScIITB06FCMGjUK9erV0+pz7949eHp6Iicnx6DFGktZGtkhIiKSC12/v/W+wMrFixfx7bffolevXoXeTNPNzY2nqBMREZFZ0PswVkREBPr27Zsv6Gg0Ghw4cABA7sXrgoODDVMhERERUQnoHXbatWuHxMTEfO1qtRrt2rUzSFFEREREhqJ32BFCQKFQ5Gt//PgxlEqlQYoiIiIiMhSd5+z06tULAKBQKBAWFqZ1GCs7Oxtnz55Fy5YtDV8hERERUQnoHHbyTlMWQsDR0RF2dnbSOmtra7Ro0QKjR482fIVEREREJaBz2ImMjAQAeHt7Y/r06TxkRURERKVCia+gLAe8zg4REVHpY9Dr7DRq1Ai7d++Gi4sLGjZsWOAE5TynTp3Sv1oiIiIiI9Ep7Lz11lvShOQePXoYsx4iIiIig+JhLPAwFhERUWlk1BuBEhEREZUWOh3GcnFxKXKezvMKuroyERERkanoFHYWLFhg5DKIiIiIjEOnsDNs2DBj10FERERkFDqFnZSUFGniT0pKSpF9OcGXiIiIzInOc3YSEhJQoUIFODs7Fzh/J+8GodnZ2QYvkoiIiKi4dAo7e/bsQfny5QEAe/fuNWpBRERERIbE6+yA19khIiIqjQx6u4gXJSUlYfny5YiJiQEA1KlTB8OHD5dGf4iIiIjMhd4XFTxw4AC8vb2xaNEiJCUlISkpCYsWLUK1atVw4MABY9RIREREVGx6H8by9/dHYGAglixZAktLSwBAdnY23n77bfz55584d+6cUQo1Jh7GIiIiKn2MdruIuLg4TJs2TQo6AGBpaYmpU6ciLi6ueNUSERERGYneYadRo0bSXJ3nxcTEoH79+gYpioiIiMhQdJqgfPbsWen5O++8g0mTJiEuLg4tWrQAAPz111/4/vvvMW/ePONUSURERFRMOs3ZsbCwgEKhwMu6ltaLCnLODhERUelj0FPP4+PjDVYYERER0aukU9jx8vIydh1ERERERlGsiwoCwMWLF3Hz5k08e/ZMq/3NN98scVFEREREhqJ32Ll27Rp69uyJc+fOac3jybs5aGmcs0NERETypfep55MmTUK1atXw4MED2Nvb48KFCzhw4ACaNGmCffv2GaFEIiIiouLTe2TnyJEj2LNnD9zc3GBhYQELCwu0bt0ac+fOxTvvvIPo6Ghj1ElERERULHqP7GRnZ8PR0REA4Obmhrt37wLIncQcGxtr2OqIiIiISkjvkZ169erhzJkzqFatGpo3b4758+fD2toay5YtQ/Xq1Y1RIxEREVGx6R12PvjgA6SlpQEAPvroI7zxxhsICgqCq6sr1q1bZ/ACiYiIiEpC77ueFyQxMREuLi7SGVmlDa+gTEREVPoY9ArKhbl16xYAoEqVKiXZDBEREZHR6D1BWaPRYNasWVCpVPD29oa3tzdUKhU++OADZGVlGaNGIiIiomLTe2Rn4sSJ2Lx5M+bPn4/AwEAAuaejz549G48fP8aSJUsMXiQRERFRcek9Z0elUmHt2rXo2rWrVvv//vc/DBw4EGq12qAFvgqcs0NERFT66Pr9rfdhLBsbG3h7e+drr1atGqytrfXdHBEREZFR6R12JkyYgI8//hiZmZlSW2ZmJj799FNMmDDBoMURERERlZROc3Z69eqltbxr1y5UrlwZ9evXBwCcOXMGz549Q4cOHQxfIREREVEJ6BR2VCqV1nLv3r21lnnqOREREZkrncJOZGSksesgIiIiMopiX1Tw4cOH0o0/a9WqBXd3d4MVRURERGQoek9QTktLw4gRI1CpUiW0adMGbdq0gaenJ0aOHIn09HRj1EhERERUbHqHnalTp2L//v347bffkJycjOTkZPzyyy/Yv38/pk2bZowaiYiIiIpN74sKurm5YePGjWjbtq1W+969e9GvXz88fPjQkPW9EryoIBERUeljtIsKpqenw8PDI197hQoVeBiLiIiIzI7eYScwMBARERHIyMiQ2p4+fYo5c+ZI98oiIiIiMhd6n421YMECdOnSJd9FBW1tbbFjxw6DF0hERERUEnrP2QFyD2VFRUXh0qVLAAA/Pz8MHjwYdnZ2Bi/wVeCcHSIiotJH1+9vvUZ2srKyULt2bWzduhWjR48ucZFERERExqbXnJ1y5cppzdUhIiIiMnd6T1AeP348Pv/8c2g0GmPUQ0RERGRQek9QPn78OHbv3o0//vgD/v7+UCqVWus3b95ssOKIiIiISkrvsOPs7JzvrudERERE5krvsMM7oBMREVFpovOcnZycHHz++edo1aoVmjZtivfffx9Pnz41Zm1EREREJaZz2Pn000/xr3/9Cw4ODnjttdewcOFCjB8/3pi1EREREZWYzmFn1apVWLx4MXbs2IGff/4Zv/32G6KiopCTk2PM+oiIiIhKROewc/PmTXTr1k1a7tixIxQKBe7evWuUwoiIiIgMQeewo9FoYGtrq9VWrlw5ZGVlGbwoIiIiIkPR+WwsIQTCwsJgY2MjtWVkZGDs2LFa19rhdXaIiIjInOgcdoYNG5avbciQIQYthoiIiMjQdA47vL4OERERlUZ63xuLiIiIqDRh2CEiIiJZY9ghIiIiWWPYISIiIllj2CEiIiJZY9ghIiIiWTPrsDN37lw0bdoUjo6OqFChAnr06IHY2FitPm3btoVCodB6jB071kQVExERkbkx67Czf/9+jB8/Hn/99Rd27tyJrKwsvP7660hLS9PqN3r0aCQkJEiP+fPnm6hiIiIiMjc6X1TQFLZv3661vHLlSlSoUAEnT55EmzZtpHZ7e3tUrFjxVZdHREREpYBZj+y8SK1WAwDKly+v1R4VFQU3NzfUq1cPM2fORHp6uinKIyIiIjNk1iM7z8vJycHkyZPRqlUr1KtXT2ofNGgQvLy84OnpibNnz+K9995DbGxskTckzczMRGZmprSckpJi1NqJiIjIdEpN2Bk/fjzOnz+PQ4cOabWHh4dLz/39/VGpUiV06NABV69ehY+PT4Hbmjt3LubMmWPUeomIiMg8lIrDWBMmTMDWrVuxd+9eVK5cuci+zZs3BwDExcUV2mfmzJlQq9XS49atWwatl4iIiMyHWY/sCCEwceJEbNmyBfv27UO1atVe+prTp08DACpVqlRoHxsbG9jY2BiqTCIiIjJjZh12xo8fjzVr1uCXX36Bo6Mj7t27BwBQqVSws7PD1atXsWbNGnTr1g2urq44e/YspkyZgjZt2iAgIMDE1RMREZE5UAghhKmLKIxCoSiwPTIyEmFhYbh16xaGDBmC8+fPIy0tDVWqVEHPnj3xwQcfwMnJSef3SUlJgUqlglqt1ut1REREZDq6fn+b9cjOy3JYlSpVsH///ldUDREREZVGpWKCMhEREVFxMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGsySbsfP/99/D29oatrS2aN2+OY8eOmbokIiIiMgOyCDvr1q3D1KlTERERgVOnTqF+/fro3LkzHjx4YOrSiIiIyMRkEXa+/vprjB49GsOHD0edOnWwdOlS2NvbY8WKFaYujYiIiEzMytQFlNSzZ89w8uRJzJw5U2qzsLBAx44dceTIkQJfk5mZiczMTGlZrVYDAFJSUoxbLBERERlM3ve2EKLIfqU+7Dx69AjZ2dnw8PDQavfw8MClS5cKfM3cuXMxZ86cfO1VqlQxSo1ERERkPE+ePIFKpSp0fakPO8Uxc+ZMTJ06VVrOyclBYmIiXF1doVAoTFhZ6ZaSkoIqVarg1q1bcHJyMnU5RAC4X5L54T5pOEIIPHnyBJ6enkX2K/Vhx83NDZaWlrh//75W+/3791GxYsUCX2NjYwMbGxutNmdnZ2OV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", | |
| "text/plain": [ | |
| "<Figure size 640x480 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# JohanC's suggestiom for https://stackoverflow.com/q/78543170/8508004\n", | |
| "import numpy as np\n", | |
| "import pandas as pd\n", | |
| "#import matplotlib.pyplot as plt; NOT NEEDED ONCE I ADDED LINE BREAKS IN COLUMN LABEL, see below\n", | |
| "\n", | |
| "# to generate mock data use guesstimations from M.A.\n", | |
| "y_ranges = [\n", | |
| " [(45, 50), (50, 55), (52, 58), (48, 53), (47, 56)],\n", | |
| " [(55, 60), (60, 65), (62, 68), (58, 63), (57, 66)],\n", | |
| " [(75, 80), (80, 85), (82, 88), (78, 83), (77, 86)]\n", | |
| "]\n", | |
| "# generate mock data\n", | |
| "sig_factor_multiplier = 8\n", | |
| "avgs_less_than1year = [np.mean(x) for x in y_ranges[0]]\n", | |
| "avgs_greater_than1year = [np.mean(x) for x in y_ranges[1]] \n", | |
| "avgs_at_most_primary = [np.mean(x) for x in y_ranges[2]]\n", | |
| "err_range_less_than1year = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[0]]\n", | |
| "err_range__greater_than1year = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[1]] \n", | |
| "err_range__at_most_primary = [(x[1]-x[0])*sig_factor_multiplier for x in y_ranges[2]]\n", | |
| "hospitals = [\"a\",\"b\",\"c\",\"d\",\"e\"]\n", | |
| "def make_values_with_mean_covering_range(mu_x, sigma_x, number_values):\n", | |
| " return np.random.normal(mu_x, sigma_x, number_values) # based on https://stackoverflow.com/a/57335302/8508004\n", | |
| "\n", | |
| "\n", | |
| "# Generate dataframe with mock data values and category labels\n", | |
| "# first, make a list of lists with each sample probability for each hospital for under year, over, at most primary\n", | |
| "list_o_data = []\n", | |
| "groupdata_and_labels = [(avgs_less_than1year,err_range_less_than1year,\"Primary +\\nbooster < 1 yr\"),(avgs_greater_than1year,err_range__greater_than1year,\"Primary +\\nbooster >= 1 yr\"),(avgs_at_most_primary,err_range__at_most_primary,\"At most\\nprimary\")]\n", | |
| "for grp_ind,gdnl in enumerate(groupdata_and_labels):\n", | |
| " for hosp_indx,hospital in enumerate(hospitals):\n", | |
| " the_group_label = gdnl[2]\n", | |
| " the_prob_values = make_values_with_mean_covering_range(gdnl[0][hosp_indx], gdnl[1][hosp_indx], 1000)\n", | |
| " for pv in the_prob_values:\n", | |
| " list_o_data.append([hospital,the_group_label,pv])\n", | |
| "df_labels = ['hospital', 'Groups','Probability hospital (%)']\n", | |
| "df = pd.DataFrame.from_records(list_o_data, columns=df_labels)\n", | |
| "## ALL THAT ABOVE WAS ONLY TO MAKE DATAFRAME ##-------------------------------------------------## ALL THAT ABOVE WAS ONLY TO MAKE DATAFRAME ##\n", | |
| "\n", | |
| "#plt.figure(figsize=(7.6, 6)) # similar to https://stackoverflow.com/a/50671064/8508004 for setting plot size ; NOT NEEDED ONCE I ADDED LINE BREAKS IN COLUMN LABEL\n", | |
| "\n", | |
| "#With the dataframe in hand, Seaborn will happily make the plot\n", | |
| "import seaborn as sns\n", | |
| "my_palette = {\n", | |
| " 'a': 'black',\n", | |
| " 'b': 'tab:blue',\n", | |
| " 'c': 'tab:cyan',\n", | |
| " 'd': 'gold',\n", | |
| " 'e': 'tab:red',\n", | |
| "} #based on https://stackoverflow.com/a/68616910/8508004 and https://seaborn.pydata.org/generated/seaborn.pointplot.html saying \"a dictionary mapping hue levels to matplotlib colors.\"\n", | |
| "p = sns.pointplot(\n", | |
| " data=df, x=\"Groups\", y=\"Probability hospital (%)\",\n", | |
| " capsize=0, legend=False, linewidth = 1.78, palette = my_palette,\n", | |
| " linestyle=\"none\", hue=\"hospital\", dodge=.27 ,markers=[\"o\", \"s\",\"D\", \"^\",\"v\",], markersize = 5.0, #marker styles based on https://seaborn.pydata.org/tutorial/properties.html\n", | |
| ") # this based on examples in https://seaborn.pydata.org/generated/seaborn.pointplot.html\n", | |
| "\n", | |
| "# Customize the plot some\n", | |
| "# Set the y-axis label and ticks\n", | |
| "#a.set_ylabel(\"Probability hospital (%)\") # works but made it unnecessary by putting label in dataframe column name\n", | |
| "p.set_xlabel(None) # remove the 'Groups' label below categories\n", | |
| "p.set_yticks(np.arange(0, 101, 25))\n", | |
| "#p.set_ylim(40, 91)\n", | |
| "\n", | |
| "# internal text-label in the top-left corner\n", | |
| "p.text(0.03, 0.95, \"At least 60 yrs\", transform=p.transAxes,\n", | |
| " fontsize=12, verticalalignment='top', bbox=dict(facecolor='white', edgecolor='none'));" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3 (ipykernel)", | |
| "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.10.12" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment