\n"
],
"text/plain": [
" Sample Study Country Admin level 1 Country latitude \\\n",
"0 FP0008-C 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n",
"1 FP0009-C 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n",
"2 FP0010-CW 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n",
"3 FP0011-CW 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n",
"4 FP0012-CW 1147-PF-MR-CONWAY Mauritania Hodh el Gharbi 20.265149 \n",
"\n",
" Country longitude Admin level 1 latitude Admin level 1 longitude Year \\\n",
"0 -10.337093 16.565426 -9.832345 2014.0 \n",
"1 -10.337093 16.565426 -9.832345 2014.0 \n",
"2 -10.337093 16.565426 -9.832345 2014.0 \n",
"3 -10.337093 16.565426 -9.832345 2014.0 \n",
"4 -10.337093 16.565426 -9.832345 2014.0 \n",
"\n",
" ENA All samples same case Population % callable QC pass \\\n",
"0 ERR1081237 FP0008-C AF-W 82.48 True \n",
"1 ERR1081238 FP0009-C AF-W 88.95 True \n",
"2 ERR2889621 FP0010-CW AF-W 87.01 True \n",
"3 ERR2889624 FP0011-CW AF-W 86.95 True \n",
"4 ERR2889627 FP0012-CW AF-W 89.86 True \n",
"\n",
" Exclusion reason Sample type Sample was in Pf7 Fws \n",
"0 Analysis_set gDNA True 0.820692 \n",
"1 Analysis_set gDNA True 0.998084 \n",
"2 Analysis_set sWGA True 0.822654 \n",
"3 Analysis_set sWGA True 0.755678 \n",
"4 Analysis_set sWGA True 0.995906 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Match FWS scores to corresponding QC-passed samples by merging the data frames\n",
"fws_qcplus_samples = pd.merge(qcplus_samples, fws_df, on='Sample', how='left')\n",
"fws_qcplus_samples.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "DdhS0ADWX2Fu",
"outputId": "8410ca39-92d7-4a46-dab5-db08303e09c7"
},
"outputs": [
{
"data": {
"text/plain": [
"(24409, 18)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Check there are as many samples as we expected (24,409)\n",
"fws_qcplus_samples.shape\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fHu2AWbIbBUW"
},
"source": [
"## Generate population-level summaries\n",
"\n",
"Here we define the ten subpopulations present in Pf8, listing their acronyms, full names, and assigning colours to be used in plotting. We store the information in an ordered dictionary."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"id": "OzqAG0pMUTXR",
"tags": []
},
"outputs": [],
"source": [
"georegions = collections.OrderedDict([\n",
" ('SA',dict(n='South America', c='#4daf4a')),\n",
" ('AF-W',dict(n='West Africa', c='#e31a1c')),\n",
" ('AF-C',dict(n='Central Africa', c='#fd8d3c')),\n",
" ('AF-NE',dict(n='Northeast Africa', c='#bb8129')),\n",
" ('AF-E',dict(n='East Africa', c='#fecc5c')),\n",
" ('AS-S-E',dict(n='Eastern South Asia', c='#dfc0eb')),\n",
" ('AS-S-FE',dict(n='Far-Eastern South Asia', c='#984ea3')),\n",
" ('AS-SE-W',dict(n='Western Southeast Asia', c='#9ecae1')),\n",
" ('AS-SE-E',dict(n='Eastern Southeast Asia', c='#3182bd')),\n",
" ('OC-NG',dict(n='Oceania and Papua New Guinea', c='#f781bf'))])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6gQVe5GbbvsW"
},
"source": [
"We can generate summaries of F*WS* for each population"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "f7rSIxEnbr3_",
"outputId": "47af447b-3136-4b80-d04d-8c0e2d5d9175"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SA: Mean = 0.988, Median = 0.998, Range = (0.585, 1.000)\n",
"AF-W: Mean = 0.867, Median = 0.974, Range = (0.155, 1.000)\n",
"AF-C: Mean = 0.868, Median = 0.958, Range = (0.225, 1.000)\n",
"AF-NE: Mean = 0.900, Median = 0.996, Range = (0.241, 1.000)\n",
"AF-E: Mean = 0.842, Median = 0.951, Range = (0.181, 1.000)\n",
"AS-S-E: Mean = 0.914, Median = 0.992, Range = (0.441, 1.000)\n",
"AS-S-FE: Mean = 0.910, Median = 0.994, Range = (0.354, 1.000)\n",
"AS-SE-W: Mean = 0.960, Median = 0.997, Range = (0.402, 1.000)\n",
"AS-SE-E: Mean = 0.967, Median = 0.996, Range = (0.356, 1.000)\n",
"OC-NG: Mean = 0.964, Median = 0.998, Range = (0.477, 1.000)\n"
]
}
],
"source": [
"for p in georegions.keys():\n",
"\n",
" # Filter the data for the current population\n",
" population_data = fws_qcplus_samples[fws_qcplus_samples['Population'] == p]['Fws']\n",
"\n",
" # Calculate mean, median, min, and max\n",
" mean_fws = np.nanmean(population_data)\n",
" median_fws = np.nanmedian(population_data)\n",
" min_fws = np.nanmin(population_data)\n",
" max_fws = np.nanmax(population_data)\n",
"\n",
" # Print the results\n",
" print(\n",
" f\"{p}: Mean = {mean_fws:.03f}, Median = {median_fws:.03f}, \"\n",
" f\"Range = ({min_fws:.03f}, {max_fws:.03f})\"\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "m3hgeN3rb_pT"
},
"source": [
"## Plot the data\n",
"\n",
"We will generate a box plot to display the data. For simplicity, we exclude outliers from displaying in the plot.\n",
"\n",
"**What does a box plot show?**\n",
"\n",
"- Coloured box: the middle 50% of values for each population. This is also known as the interquartile range.\n",
"- Line inside the box: the median value for each population.\n",
"- Whiskers: the lines extending from the box show the range of F*WS* values, excluding extreme outliers."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 612
},
"id": "RrwGVkK1UTXS",
"outputId": "ca019492-5c16-4e1e-c124-81fbc1e9e971"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA14AAAJTCAYAAAAYMceYAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZGBJREFUeJzt3Xd4FOXax/F7UkhvEEoooUhJkFBVQJSiSBBELCiIqFgAUeCI6BFQBFSqCCIiCiihqSDdoxCOQqiiwBFETehdiqEkRiCQ5H7/4N01y4bUneyS/X6uiwuZmZ19dpzdnd8+z3OPoaoqAAAAAADTeDi7AQAAAABQ0hG8AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZAQvAAAAADAZwQsAAAAATEbwAgAAAACTEbwAAAAAwGQuHbzmzZsnffr0kVtuuUV8fHzEMAyJi4sr8H6ysrJkypQpEhMTI35+flK2bFl57LHH5MCBA45vNAAAAABcw6WD1xtvvCHTp0+Xw4cPS0RERKH306dPHxkwYICoqgwYMEDat28vS5YskVtvvVX27t3rwBYDAAAAgD2XDl4zZ86UQ4cOyZ9//inPP/98ofaxdu1amTlzprRs2VL+97//ybhx42Tu3LmybNkyOXv2rPTr18/BrQYAAAAAW17ObkBu2rZtW+R9zJgxQ0RE3n77bSlVqpR1+b333iutW7eW1atXy5EjRyQyMrLIzwUAAAAAOXHpHi9HSEhIkICAAGnRooXdutjYWBERWbduXXE3CwAAAIAbceker6L6+++/5cSJE1KvXj3x9PS0W1+rVi0RkVzneaWnp0t6err136oqly9flvDwcDEMw/GNBgAAAFDilOjglZKSIiIiISEhOa4PDg622S4nY8aMkZEjR+a4b8vji+LIkSNS46YakpmRWeR9mcHTy1MO7D/gckMxjxw5IsnJybluk5iYKD169HDo886bN0+io6Nz3SY8PNzljpcFx61gjhw5IjfdVEMyXPT96eXlKftd8P0pwrlWUEeOHJHo6Gi5cOGCs5uSI39/f0lMTHS54yYi8sMPP8jvv/+e6zaHDx+Wt99+26HPO2zYMKlatWqu29StW1eaN2/u0OctqqufazdJRkaGs5uSIy8vL9m/f7/LnWtXr9dukkwXPW6eXl5ywMWOG+daDs9ZbM90gxoyZIi8/PLL1n+npqZKlSpVnNgiHDlyRKLr1JELly4V+3Pn5yLR39dXEnfvdqkPP5H/P25RdeTCRRc9bn6+kpjkWsctOTnZZUOXiEhGRqYkJye71DETsYSIKLlw4WKxP3e+zjV/P0lMTHKp45acnCwXLlyQ/k8OkkrlK193u8tXLsufZ0879LnLli4npbxLXXf98VPHZMqc91z2XGt5Z0vJyCz+C7v8BDkvTy/Zf8C1Loavfq655oWwiEhGRoZLnmvJyckuG7pERDJd8Lhxrtkr0cHL0tN1vR6t1NRUm+1y4uPjIz4+Po5v3P+LjIyU/v36y/vvv2/acxRF/379XepNLPL/FyiXLskHoaWlplfRT+FLqnIsM0Mqe3qJbxGHj+7LyJAB58+63IefyP8ft4uXZE732hJd3r9I+7p0JUsOnb0k1Ur7iq930aeKJp66IE9+vscljxsK7mqIuChz324h0dWLNjLgUnqmHPojTapVDBRfH/sh4wWVeDBVnhi2yWXPtSlz3nN2E24oycnJTgld+ZWR6XoXw0BxCQ8PF18fX7mUXvw/+OaHr4+vhIeHF+tzlujgFRAQIBEREXLw4EHJzMy0m+dlmdtlmevlLAMHDpSHH3441212794tzz33nEOfd+bMmVKnTp1ct3HlL4uaXl4SU+r6v9IWxK1iXrh2NdHl/aVx5cAi7+f2Il5Q30hevr+CVAl3rXPkaHK6TFxx0tnNyFV09WBpHFWmyPu5vUE5B7QGgMjVi2EfX19Jd8Kokfzw8S3+i+H8CA8PFx8fX0l30RDh44QQkZfIyEjZvWd3nsPO88syPD0/Q8rzwxnDzkt08BIRadWqlXz55ZeyadMmadmypc26+Ph4ERG75cUtMjIyz//xjRs3lkaNGuW6zcWLF+XQoUNSrVo18fPzy/N5o6KixN+/aD0fgDuoGeErtSrm/Z4qTj7eFPcBLJ5o8JyUD6zg7GbYOJV2UubunOnsZtiJjIyUPbu5GC6oyMhI2eOgEOHoYybi2sfN0e2Kjo6Wxo0bO3SfxaXEBK/k5GRJTk6W8PBwm8Tfu3dv+fLLL2XYsGHy3//+13ovr5UrV0pCQoK0a9cuz8mxrsDf3z9fJ1lOZfMBADeGsa9OkhpVajq7GTYOHN0ng98d6Oxm5KpKSFWJDK3m7GbYKOXpWr3k2eXnYvjChQuSlJTk0Oe90X/wdXSIuJEDhCPl91xLTEy0+Ts3rnquuXTwmjlzpmzcuFFERHbt2mVdlpCQICIid9xxh3X43YcffigjR46U4cOHy4gRI6z7aNOmjTz33HMyc+ZMady4sXTs2FFOnDghCxYskNKlS8uUKVOK9TUBAHA9N9eKkXq1Gzi7GTb8fF2rtxfFIykpSZo0aZLv7fNT2Gb79u0EDdhxp3PNpYPXxo0bZfbs2TbLNm3aJJs2bbL+Oz/znj755BOJiYmR6dOny+TJkyUwMFAefPBBGTVqlNx0000ObzcAAMCNLCoqSrZv357ndgWZ5hAVFeWo5rms/PTeFKTnRsR1e28cxZ3ONZcOXnFxcRIXF5evbUeMGGHT05Wdh4eHDBgwQAYMGOC4xgEAAJRQ+Z3iIMI0h+wK0nuT3/sYumrvjaO407nm0sELAAAAuFHkp/emMMXQUDIQvHDD+u3KZbmo6uxm2DiQccXZTQAAAE5CMTTkhuCFG9arKeed3QQAAAAgXzyc3QAAAAAAKOkIXgAAAABgMoYa4ob1bkio1PDydnYzbBzIuMIQSAAAANgheOGGdbN3KYkpVcrZzbDhZxjObgIAAABcEEMNAQAAAMBk9HgBbmbH8TS5cDnT2c2wsefPi85uAgAAgKkIXoCb6bVwn7ObAAAA4HYYaggAAAAAJqPHCwBgih27z8qFSy42rPVwirObAABwUwQvwM3MeLSm1C7r5+xm2Njz50WGQJZAz739o7ObAACAyyB4AW6mYaVAaVw50NnNsOFfytPZTQAAADAVc7wAAAAAwGT0eAEATDFzWFOpXTXE2c2wsedwCkMgAQBOQfACAJiiYZ3S0jiqjLObYcPfl2GtAADnYKghAAAAAJiM4AUAAAAAJiN4AQAAAIDJCF4AAAAAYDKCFwAAAACYjOAFAAAAACYjeAEAAACAyQheAAAAAGAyghcAAAAAmIzgBQAAAAAmI3gBAAAAgMkIXgAAAABgMoIXAAAAAJiM4AUAAAAAJiN4AQAAAIDJCF4AAAAAYDKCFwAAAACYjOAFAAAAACYjeAEAAACAyQheAAAAAGAyghcAAAAAmIzgBQAAAAAmI3gBAAAAgMkIXgAAAABgMoIXAAAAAJiM4AUAAAAAJiN4AQAAAIDJCF4AAAAAYDKCFwAAAACYjOAFAAAAACbzcnYDAMDVHUm+7JD9XL6SJSfPX5EKod5Syrtov3s5qk0AAKB4ELwA4DrCw8PF389Xxi7+w9lNyZG/n6+Eh4c7uxkAACAfCF4AcB2RkZGSmLRbkpOTHbK/xMRE6dGjh8ybN0+io6OLvL/w8HCJjIx0QMsAAIDZCF4AkIvIyEiHh5vo6Ghp3LixQ/cJAABcG8U1AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZAQvAAAAADAZwQsAAAAATMZ9vAAAwA3tRNrxIu/jSuZlOXMhWcr4h4u3ZymXaBOAkoXgBQCAi9h3eK9D9nMp/ZIcO3lUKleoIr4+vi7RJjOEh4eLn6+fzPrfx85uSo78fP0kPDzc2c0A4CIIXgAAOFl4eLj4+/vLwFF9nd2UHPn7+7tkgIiMjJSk3UmSnJxc5H0lJiZKjx49ZN68eRIdHe2A1l39/xoZGemQfQG48RG8AABwssjISElMTHRIgBBxfIhw5QARGRnp0LZFR0dL48aNHbY/ALAgeAEA4AIcHSBECBEA4EqoaggAAAAAJiN4AQAAAIDJCF4AAAAAYDKCFwAAAACYjOAFAAAAACYjeAEAAACAyQheAAAAAGAyghcAAAAAmIzgBQAAAAAmI3gBAAAAgMkIXgAAAABgMoIXAAAAAJiM4AUAAAAAJiN4AQAAAIDJXD54bd26VTp06CChoaESEBAgzZo1k4ULFxZoH3/88Yf861//krp160pAQICUL19e7rjjDpk7d65kZmaa1HIAAAAAuMrL2Q3Izdq1ayU2NlZ8fX2lW7duEhQUJIsXL5auXbvK0aNHZdCgQXnu48CBA9K0aVM5c+aMxMbGSqdOnSQ1NVWWLVsmTz75pKxZs0ZmzZpVDK8GAAAAgLty2R6vjIwM6dWrl3h4eMj69etl+vTp8t5778nOnTuldu3aMnToUDl8+HCe+5kwYYIkJyfLpEmTZOXKlTJu3DiZNm2aJCYmSmRkpMTFxeVrPwAAAABQWC4bvNasWSP79++X7t27S8OGDa3LQ0JCZOjQoXL58mWZPXt2nvs5cOCAiIh06NDBZnloaKjccccdIiKSnJzsuIYDAAAAwDVcNnglJCSIiEi7du3s1sXGxoqIyLp16/LcT7169URE5Ntvv7VZfv78edm0aZNUqFBB6tatW8TWAgAAAMD1uewcr71794qISK1atezWVahQQQIDA63b5ObVV1+Vr7/+WgYOHCirVq2S+vXrW+d4+fv7y9KlS8XPz++6j09PT5f09HTrv1NTUwvxagAAAAC4M5cNXikpKSJydWhhToKDg63b5KZ8+fLyww8/SI8ePWTlypWyatUqERHx8/OT559/Xho0aJDr48eMGSMjR44sYOsBAAAA4B8uO9TQUfbt2yctWrSQP//8UzZs2CB//fWXHD16VN588015++235e677861pPyQIUMkJSXF+ufo0aPF2HoAAAAAJYHL9nhZerqu16uVmpoqYWFhee6nZ8+ecvjwYTlw4IBUqFBBREQCAwNl8ODBcurUKXn//fflyy+/lMcffzzHx/v4+IiPj08hXwUAAAAAuHCPl2VuV07zuE6ePClpaWk5zv/K7q+//pJNmzZJdHS0NXRl16ZNGxER+fnnnx3QYgAAAADImcsGr1atWomIyOrVq+3WxcfH22xzPZcvXxaR65eL//PPP0VE6NECAAAAYCqXDV5333231KhRQz7//HPZsWOHdXlKSoqMHj1aSpUqJU8++aR1+YkTJyQpKclmaGKZMmWkTp06cuTIEZk5c6bN/s+fPy8TJkwQkX96vgAAAADADC4bvLy8vGTmzJmSlZUlLVu2lN69e8ugQYOkQYMGsmfPHhk9erRUq1bNuv2QIUMkOjpali5darOfSZMmiZeXl/Tq1Uvatm0rr776qjz33HNSu3ZtSUpKkocffljatm1bzK8OAAAAgDtx2eIaIld7ojZu3CjDhw+XBQsWyJUrVyQmJkbGjRsnXbt2zdc+7r33Xtm8ebO8++67snHjRlm3bp34+vpKdHS0vPnmm9K3b1+TXwUAAAAAd+fSwUtE5LbbbpOVK1fmuV1cXJzExcXluO7WW2+VhQsXOrhlAAAAAJA/LjvUEAAAAABKCoIXAAAAAJiM4AUAAAAAJnP5OV7A9ezLyHDIfi6pyrHMDKns6SW+huESbQIAAEDJQvDCDSc8PFz8fX1lwPmzzm5Kjvx9fSU8PNzZzQAAAIALIXjhhhMZGSmJu3dLcnKyQ/aXmJgoPXr0kHnz5kl0dHSR9xceHi6RkZEOaBkAAABKCoIXbkiRkZEODzfR0dHSuHFjh+7TFSWeulDkfVy6kiWHzl6SaqV9xde76FNFHdEmAAAAV0bwAtxEeHi4+Pv5ypOf73F2U3Lk78cQTQAAUHIRvAA3ERkZKYlJjhmi6ejhmSIM0QQAACUbwQtwI44eoukuwzMBAACKivt4AQAAAIDJCF4AAAAAYDKCFwAAAACYjOAFAAAAACYjeAEAAACAyQheAAAAAGAyghcAAAAAmIzgBQAAAAAmI3gBAAAAgMkIXgAAAABgMoIXAAAAAJiM4AUAAAAAJiN4AQAAAIDJCF4AAAAAYDKCFwAAAACYjOAFAAAAACYjeAEAAACAyQheAAAAAGAyghcAAAAAmIzgBQAAAAAmI3gBAAAAgMm8nN0AAEDJlHgwtcj7uJSeKYf+SJNqFQPF18fTJdoEAEBhELwAAA4VHh4u/v5+8sSwTc5uSo78/f0kPDzc2c0AALgZghcAwKEiIyMlMTFJkpOTi7yvxMRE6dGjh8ybN0+io6Md0LqrwTAyMtIh+wIAIL8IXgAAh4uMjHRouImOjpbGjRs7bH8AABQ3imsAAAAAgMkIXgAAAABgMoIXAAAAAJiMOV4AUEQXLlyQpKSkPLdLTEy0+Ts3UVFR4u/vX+S2AQAA10DwAoAiSkpKkiZNmuR7+x49euS5zfbt2ykmAQBACULwAoAiioqKku3bt+e53cWLF+XQoUNSrVo18fPzy3OfAACg5CB4AUAR+fv757t3qkWLFia3BgAAuCKKawAAAACAyQheAAAAAGAyghcAAAAAmIzgBQAAAAAmI3gBAAAAgMkIXgAAAABgMoIXAAAAAJiM4AUAAAAAJiN4AQAAAIDJCF4AAAAAYDKCFwAAAACYjOAFAAAAACYjeAEAAACAyQheAAAAAGAyghcAAAAAmIzgBQAAAAAmI3gBAAAAgMkIXgAAAABgMoIXAAAAAJiM4AUAAAAAJiN4AQAAAIDJvJzdAAAAkD8XLlyQpKSkPLdLTEy0+Ts3UVFR4u/vX+S2AQByR/ACAOAGkZSUJE2aNMn39j169Mhzm+3bt0vjxo2L0iwAQD4QvAAAuEFERUXJ9u3b89zu4sWLcujQIalWrZr4+fnluU8AgPkIXgAA3CD8/f3z3TvVokULk1sDACgIghcAACjR8jM3riDz4kSYGweg4AheAACgRCvI3Lj8zIsTYW4cgIIjeAEAgBItP3PjCjIvzrJPACgIghcAACjR8js3jnlxAMzEDZQBAAAAwGQELwAAAAAwGcELAAAAAExG8AIAAAAAkxG8AAAAAMBkBC8AAAAAMBnBCwAAAABM5vLBa+vWrdKhQwcJDQ2VgIAAadasmSxcuLDA+zl9+rQMHDhQatWqJb6+vlKmTBlp3ry5TJs2zYRWAwAAAMA/XPoGymvXrpXY2Fjx9fWVbt26SVBQkCxevFi6du0qR48elUGDBuVrPzt27JB27drJuXPnpGPHjtKlSxdJS0uTxMRE+frrr6Vv374mvxIAAAAA7sxlg1dGRob06tVLPDw8ZP369dKwYUMREXnzzTfltttuk6FDh0qXLl2katWque4nNTVVOnfuLCIi27dvl/r169s9DwAAAACYyWWHGq5Zs0b2798v3bt3t4YuEZGQkBAZOnSoXL58WWbPnp3nfj766CM5cuSIjB071i50iYh4ebls9gQAAABQQrhs6khISBARkXbt2tmti42NFRGRdevW5bmfBQsWiGEY8vDDD8vu3btl9erVcvHiRYmKipL27dtLqVKlcn18enq6pKenW/+dmppagFcBAAAAAC4cvPbu3SsiIrVq1bJbV6FCBQkMDLRucz2XL1+WXbt2SdmyZWXKlCkyfPhwycrKsq6vUaOGLFu2TGJiYq67jzFjxsjIkSML+SoAAAAAwIWHGqakpIjI1aGFOQkODrZucz1nz56VzMxMOXPmjLz11lsyfvx4OXXqlBw7dkyGDRsmBw8elE6dOsmlS5euu48hQ4ZISkqK9c/Ro0cL/6IAAAAAuCWXDV6OYOndyszMlBdeeEEGDRok5cqVk0qVKslbb70ljzzyiBw+fFgWLVp03X34+PhIcHCwzR8AAAAAKAiXDV6Wnq7r9WqlpqZetzfs2n2IiNx///126y3Ltm3bVthmAgAAAECeXDZ4WeZ25TSP6+TJk5KWlpbj/K/sAgICpFKlSiIiEhoaarfesuzixYtFaywAAAAA5MJlg1erVq1ERGT16tV26+Lj4222yc1dd90lIiK///673TrLsmrVqhW2mQAAAACQJ5cNXnfffbfUqFFDPv/8c9mxY4d1eUpKiowePVpKlSolTz75pHX5iRMnJCkpyW5o4vPPPy8iImPHjpXz589bl588eVImT54sHh4e8vDDD5v6WgAAAAC4N5cNXl5eXjJz5kzJysqSli1bSu/evWXQoEHSoEED2bNnj4wePdqmp2rIkCESHR0tS5cutdnP7bffLi+//LL89ttvUr9+fXnxxReld+/e0qBBAzl+/Li88847Urt27WJ+dQAAAADcicvex0tEpE2bNrJx40YZPny4LFiwQK5cuSIxMTEybtw46dq1a773895770lMTIxMnTpV4uLixDAMadSokXz88cfy4IMPmvgKAAAAAMDFg5eIyG233SYrV67Mc7u4uDiJi4u77vqePXtKz549HdcwAAAAAMgnlx1qCAAAAAAlBcELAAAAAExG8AIAAAAAkxG8AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZAQvAAAAADAZwQsAAAAATEbwAgAAAACTEbwAAAAAwGQELwAAAAAwGcELAAAAAExG8AIAAAAAkxG8AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZAQvAAAAADAZwQsAAAAATEbwAgAAAACTEbwAAAAAwGQODV5vvPGGLFq0yPrvv/76SxITE0VVHfk0AAAAAHBDcWjwmj17tpQtW1ZERP7++2+pV6+e3HzzzVKvXj05evSoI58KAAAAAG4YDg1eycnJUqNGDRERWbp0qXh7e8vx48elWbNmMnjwYEc+FQAAAADcMBwavCpVqmTt2Vq4cKE8++yzEhERIYMGDZI1a9Y48qkAAAAA4Ibh5cid9ejRQ1566SV54IEHZOXKlTJ+/HgREfH09JSUlBRHPhUAAAAA3DAcGryGDRsmqirffPONjBw5UqKiokREZNu2bVK1alVHPhUAAAAA3DAcGrw8PT1l5MiRMnLkSJvlx48fl8cee8yRTwUAAAAANwyHBq8rV66It7e33fJ///vfjnwaAAAAALihOLS4RuXKlWX48OHyxx9/OHK3AAAAAHBDc2jwmjdvnvz6669Sq1Yt6datm2zevNmRuwcAAACAG5JDg9c999wjixcvlj179khUVJQ8+uij0rhxY4mLi5P09HRHPhUAAAAA3DAcGrwswsPD5fnnn5dvv/1W2rRpI/3795cqVaqY8VQAAAAA4PIcWlwjIiJCUlJSJDMzU4KDg61/GjduLCEhIY58KgAAAAC4YTg0eEVFRcnu3bvlpZdekl69eklYWJgjdw8AAAAANySHDjVcu3atxMfHy549e6RWrVrSu3dv+e233xz5FAAAAABww3H4HK+YmBiZOXOm7N69W6pXry4dOnSQu+++W5YvX+7opwIAAACAG4JDhxrOnDlT0tLSJC0tTf766y9JS0uT22+/Xf7zn//I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L7xHc2H5Dr106ZI2adJEw8LCrNcinGv2cnt/njp1iuu2XDz++ONapkwZrVWrln766af6ww8/OLtJTkHwcgEPPPCAGoahhmFo586ddeLEiXr58mXrej78bK1bt87m35aA9d1332nlypW1cuXK+scff6gq4TW7d955RwMCAnTEiBF69uxZVeXcyo/27durv7+/vvvuu3ZftBs2bNB27drpsGHDnNQ613Tvvfeqn5+fTpgwwe6YJSQk6LBhw3THjh1Oap3ryi1AbNmyRX///Xcntcx13Xffferr66uTJ0+2633YuHGj1q9fX1u3bq0XLlxwUgtdl+X70fIdOm/ePA0ICNDY2Fi7baDasWNHa0/XuXPnbNYlJCTo3XffrXFxcc5pnIvr1KmT+vv762uvvaZHjx61W3/x4kUntMo5CF4u4NZbb1XDMPT+++/X8PBwNQxDGzZsqGPHjtXffvvNZlt3/xC0hNRXX31VExMTbXq1MjIytF+/fmoYhj766KP8qp7NiRMn9JZbbtEGDRro8ePHVZXQlR+dO3dWwzB04sSJdus2btyoLVu2VE9PT4ZrZhMbG6uGYej48eP10qVLNus2btyod9xxhxqGobt27XJSC11Tx44d1d/fP8dhmRs3btTbbrtNy5Urp6mpqbx3/9/AgQPVMAx9/PHHrZ9rFhs2bNDWrVurt7e3rlq1ykktdE0TJ07MMcT/8ccf2r59ezUMQ9955x0ntMx1denSRQ3D0DfeeEP/+usvm3UbNmzQu+66Sw3D0LVr1zqngS7sX//6l/r7++uoUaOsP/pmZGRYP8eOHj2qw4cP1+XLlzuzmcWG4OVElhC1dOlSLVWqlL722muakpKiL730ktapU0cNw9CAgAB94403dOXKlTk+1p388MMPGh4erp6enmoYhtavX1/feustm19KLly4oDExMRoSEqKLFy9WVQKGquqqVavUMAx97733VJVjkh/Jyclao0YNNQxD7733Xpt1GzZs0JYtW6q3t7d+//33quqe78lrfffdd+rj46MhISE6ffp0m3WWY1aqVCn97rvvVJXz0KJv377WH4yyj3ZQvXrcWrVqpT4+Prp69WontdD1XLp0Sd977z2tXbu2RkRE6IIFC6y9WpZzzcvLS9esWaOqvD8tnnjiCTUMQ8uUKaOzZ8+2G3L+448/qqenp1atWlU3bNjgpFa6lqSkJL377rvVy8tLn3nmGZtjtn79es61XGzcuFErVqyonTt3ts7nyv65f/LkSR0xYoT6+vqqYRj6+eefO6upxYbg5QL27dunNWrU0NDQUN23b5+mp6frqVOndPjw4Vq7dm1r0OjRo4d+/fXXdl3c7qRfv34aFBSk48aN09atW2tISIg2aNBAN27cqH/++aeqqi5YsED9/Pz0vvvusz7O3T8IP/30UzUMQ2fPnq2q+bvgPXLkiNsPbTp27Ji2aNFCDcOwnk87duzQO++8U728vOxCl7sHiTNnzujMmTM1IiJCa9asqfPmzdPMzEz96aefrBcneR0zdzyGU6dO1SpVqqhhGDpr1izr8uwBgoD/j9TUVFW9+kPbjBkztEqVKlqxYkX94osvdPXq1dq6des8zzXLD3budL6dPXtWb7/9djUMw/rjbmxsrM6fP99mu1GjRqmnp6e++uqrqupex+h6fvjhB+uIm759++rhw4d18+bN2qpVK74LcjF27Fj19PS0zue6NnQNGzZMDcPQ22+/XcuXL6/e3t4lPnwRvFzEtGnT1DAMnTZtms3y9PR0fe+996xzwHx9fbVBgwa6fPly/d///uek1hY/y4dZenq61qlTRx988EFNT0/XOXPmaP369dXf31979+6t27Zt04yMDO3UqZMahqFjx451cstdw4cffmgdoqma+8WbZfjmv/71L+3bt6/bzY24diL+sWPHrBcrt99+u/VCOD4+XlVz/qLdsmWLbtmyxa73wh2kpKTojBkztFy5clqzZk0dNmyYNahaerpyOma7du3S9PR0p7TZWbK//nnz5mnZsmXVMAz97LPPdOvWrfkKq9cOeyrpevbsqdOmTbN+Ll28eNEavsLCwjQqKkq9vb2tc4Etn2fZj9l3332nr732mh46dKj4X4CT/fLLLxoUFKS9e/fWFStWaM2aNdXPz0+ffvpp3bNnj2ZkZOi+ffs0JiZGDcOw9uK4q2s/1++//341DEM7deqkzZo1Uy8vL+vwwpzen5s3b3bLoa6WY3HXXXdp+fLl9cSJE3bbzJs3Tw3D0N69e6uq6qxZs7RMmTLq5eVVosMXwauYXa/S3q+//qoRERFauXJlmwu/I0eOaJUqVTQiIkJfeeUVbdeunTWE3XLLLdZf/kqyaycAz58/Xw3D0FGjRqmq6rlz5/Sll17SkJAQLV26tMbF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/lxTtR2m7+HhoaGhodqhQwd9//33dfv27Tbfi/v379cGDRrYhS93P4YEL5Pt3btXe/XqpfXr19emTZvq/PnzbSq6WE7SU6dOaWBgoLZv396uelNJVNRhcjkNQXQHXAg7jqXYQ9myZbVq1ao6d+5cm5s4ql69MJk7d64+8cQTWrVqVWsIc4eqj4sXL1bDMNTX11cXLVpks85yceLl5aXr1q2ze6y7/QKcXUJCgoaHh+uDDz5o7YHPPr/30qVLmpqaqvv377ebA0foytn1yuxb7vXjrgpTFOLvv//WrKws6/rU1FTdtWuXPvbYY25RtOWxxx5TwzD0scces1u3ceNGu6It7tzjnBNLwakyZcpo27ZttXfv3tYg5uPjo40aNdKhQ4fqt99+q5cuXdI//vjDWlSjZ8+e1ms1dz6uBK9ikJGRoX/99Zdd70T2C+GxY8eql5eXTpw4sbibV+wcOUzO8uZ1hws9LoQdzxK+ypUrpzfddJPOmTPnuj1ZKSkpunz58hxL4ZZU48ePV39/f/X397dWWV2/fr22bNkyX/Ns3JGlONLSpUutyyzvv23btukzzzyj1atXV39/fy1XrpzGxcXZbYer8lNm313DV1GKQrizKVOmWO9PNm/ePOvydevW5Vm0xZ1lPxaWKTO1a9fWXbt26R9//KELFy7UTp06aa1ataxBLDIyUvv06aNjx47VgIAALV26tD788MNu80P59RC8nCR76Pr666+1Zs2aWr9+/RLfzc8wuaLhQtjxrg1fc+fOtYavaycNu4vsr3fChAnWWw68++67etddd3FxkovRo0erYRi6ePFi67KzZ89qXFyc+vv7W6t41a1b13qBMmfOHCe22HkcUWbfMAz94IMPTG+rK3FEUQh3k/18mj17trW4yJw5czQxMfG6oYviGf/Ifu68+OKLahiG1qxZU7du3aqqV69rz58/r4sXL9bhw4dr3bp1rcfZMky/WrVqNjfsdkcELyf79NNPtWHDhlq6dOkSP0eJYXKFx4Vw4eS3WuaZM2euG77cqRci+7mT/b8nTJigAQEB6unpqR4eHrp582a7bXDVokWLrBcY33//vX766afWm8CXL19eR48erampqZqRkaFTpkyxVtO03A7DXTiizP7nn3+unp6eGhgYaPedUlI5siiEu8gp4GcPX1FRUXmGrlWrVum7776ba6Ecd5D9HBowYIC10qjlOyG7c+fOaVJSkg4bNky7dOmipUuXdovbYeSF4OUE58+f159++knvv/9+DQ8P1/r165f40MUwucLhQrhwClMt8/z58zbha/78+fzCme1LduzYsVqhQgX18fGxVnXkfLOXmZmpzzzzjM19agzD0B49etgVN1C9Olnd19fXrYaBObLM/sKFC3X37t3F0m5noyhEweUW8OPi4qzDDv/973+r6tX377XVMlevXq1169ZVPz8/t++tUbX9Xujfv781fP3444+qevU9mlPIz37TaXdG8HKCY8eO6e23364VK1bU/v37u80vKAyTKzouhPNW0GqZL7/8snW5ZdhhpUqVNCwsTBcsWFBs7Xamdu3aaZMmTTQuLs7uXlHZ57yNHz9evb291d/fX7/99tvibqbLy165cPr06fryyy/rs88+q99//71N4ZbsBZQaNGigtWvXtivsUlJRZr9wKApRcNcL+NmPzaeffqre3t5qGIZ++umnqmr7PREfH68NGzbUsLAw3bFjR/G+ABeWn/CV/e9r/9udEbyc5MiRI5qYmHjdX/pKEobJFRwXwoVT1GqZqlfD15QpU7RWrVpuccPaiRMnWntlPD09tXLlyjp58mT96aefctz+3Xfftb6HV65cWcytdX3X/tJ77Y1Ws6//5JNP1MfHR/v27esW1Wwps194FIUomLwCfvZjlH3Y4WeffWZdvnLlSm3YsKEGBQW5RcVHi5xC07XrVG2PYW7hC7YIXjANw+QKhwvhwnFktczU1FS3mTOydOlSNQxDH3jgAR04cKC1bH5QUJA+//zz+tNPP9kdz3HjxlnPOUvvNa669mIjey9N9vPsP//5j958881avXp1txhmSJn9wqEoRMHlN+BnP6/i4uKsx3b27Nm6detWtwxdqmodxnrtZ9m1cy+vvd6whK/o6GjdtGmT+Q29QRG8UGwYJpc/XAgXHNUyi6ZLly5arlw5PXHihP7xxx/62WefafXq1dUwDA0NDdW7775bN2zYYPPL8YQJE6xV+r777jsntr745adoS27FMiZOnKgxMTEaHh7uNpPNKbNfcBSFKLiCBPzs3w2qtse2fPnybhe6FixYoE899ZSGh4fr119/bbPu2tBVsWJFrVSpkv799982Py4NHDhQDcPQJk2a6MWLF932vZsbghccjmFyRceFcP5RLbPwLF+Kn3zy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LNBly5bpmTNn3GYeYXEheMF0DJODI1EtE46U36Itll/S09PT9csvv7TeqPuee+7R3bt3O/lVFB/K7BcMRSEKh4BfeC+//LJ6e3vbDcm3sPQG/vXXX9qqVSs1DENfe+01vjeLCcELxcKdh8nBsaiWCUcoTNGWjz76SI8fP67/+c9/9IUXXtCPPvpIT58+7cyXUewos59/FIUoPAJ+wWVmZuq5c+e0fv36GhERoZcuXbpu8RVL+Prll180JCRE77333uJsqlsjeAG44VAtE45S0KItrVu31scff9wtimioUma/sCgKUTQE/MLJysrS5s2ba9WqVfPc1hLU6tWrp76+vnrixInrzkOE43gIANwgVFVERPr06SNBQUGSlJRkXefhwccZCiYzM1N8fHykT58+cuTIEZk1a5aIiBiGIQcPHpSmTZuKt7e3TJgwQVatWiXPPfecbN++XT7//HM5e/ask1tfPHJ6X3Xo0EG+/fZbmTJlikyfPl1++OEHmTRpkrRo0UJERDIyMqzbnjx5UiIiIuTWW28ttjY72yuvvCKrV6+WV199Vf79739LZGSkZGZmWj+/sgsODpbBgwfLwYMHpVq1apKZmSmenp7W9e7yuZaVlWX9b1WVgIAAGTFihNSuXVvmzJkjI0eOlB9++EH+9a9/ycyZM6V///4iIuLp6SnNmzeXW265RVJTU+W3335z1ktwCZcuXRJfX185cuSILFq0KNdtVVVCQ0MlMjJSvL29xcvLq5ha6d4MzemTAABc2NmzZ6V9+/aybds2mT17tjzxxBPObhJuYL///rs0b95cAgMDZdeuXXLx4kVp2rSpXLx4Ud555x15/vnnxTAMuXz5siQnJ8vly5elWrVqzm62qWJjY+XMmTPSv39/adGihdSsWdO6LiMjw+4iTVXFMAyb4PDll19K3759pV27djJjxgwJDg4u1tfgDAcOHJC2bdtKpUqVZNGiRVK+fHlrqPDw8JAzZ87In3/+KVu2bJGbb75ZqlatKuXKlRORnI+rO8p+Lp09e1YWLlwoPj4+0qhRI2nSpIl1u+zH67777pOff/5ZEhISpFatWs5qukuYO3eu9OzZU5566imZNGmShISE2G1jOcYiIjExMRIcHCybNm0q7qa6J6f1tQFAEVAtE45E0ZZ/UGa/8CgKUTDcR8/xTp48qQ0aNFDDMHTcuHE267Ky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s2zUqFFy/vx5efLJJ609XcHBwVKnTh3ZuHGj7Nu3z7rtX3/9JUOGDMl3O6tWrSrnzp2T3377zbosMzNTXnnlFfnzzz/tti9durT1deSX5ViMHDnSZkhhSkqKdZ6cZRsAgGthqCEAwKU98cQTsmTJElm+fLnUr19f7rvvPut9vM6ePSvvvfeetfcqu/vuu086deokXbp0kWrVqsmWLVtk7dq1ctNNN8lbb71ls+2gQYOkd+/e0rx5c3nkkUckKytLVq5cab3vVn70799fVq9eLXfccYc8+uij4uvrKwkJCXL8+HFp3bq1XS9V8+bNxc/PT95//305d+6cdd7WG2+8cd3naNmypfTv31+mTJki9erVk4cfflhUVRYvXizHjh2TAQMGSMuWLfPdZgBA8aHHCwDg0gzDkEWLFsmECRPE29tbpkyZIvPmzZOYmBhZvny5vPzyyzk+7uGHH5avvvpK9u3bJ++//7788ssv0rNnT9m4caPdzZN79eolU6dOlbCwMJk5c6asXLlSevbsKV988UW+23nffffJokWLpEaNGjJv3jz5/PPPJSoqSn766SepWrWq3falS5eWRYsWSe3atWXGjBkybNgwGTZsWJ7P88EHH8hnn30mFSpUkOnTp8uMGTMkIiJCPvvssxxvngwAcA2GqqqzGwEAgKPExcXJ008/LbNmzZKePXs6uzkAAIgIPV4AAAAAYDqCFwAAAACYjOAFAAAAACZjjhcAAAAAmIweLwAAAAAwGcELAAAAAExG8AIAAAAAkxG8AAAAAMBkBC8AAAAAMBnBCwAAAABMRvACAAAAAJMRvAAAAADAZP8HPryijNzfM1wAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Set up plot parameters\n",
"rcParams = plt.rcParams\n",
"rcParams['font.size'] = 12\n",
"rcParams['axes.labelsize'] = 14\n",
"plt.rcParams['xtick.labelsize'] = 14\n",
"plt.rcParams['ytick.labelsize'] = 14\n",
"\n",
"fig, ax = plt.subplots(figsize=(10, 6)) # Figure size\n",
"\n",
"# Hide spines (the plot space outline)\n",
"ax.spines['right'].set_visible(False)\n",
"ax.spines['top'].set_visible(False)\n",
"\n",
"# List all populations\n",
"all_pops = [g for g in georegions.keys()]\n",
"\n",
"# Set up the number of boxplot positions to account for all populations\n",
"pos = np.arange(1, len(all_pops) + 1)\n",
"\n",
"# Create boxplot without outliers\n",
"bplt = ax.boxplot(\n",
" [np.array(fws_qcplus_samples[fws_qcplus_samples['Population'] == g]['Fws']) for g in georegions.keys()],\n",
" medianprops=dict(color='black', linewidth=2.5, solid_capstyle='butt'),\n",
" patch_artist=True,\n",
" positions=pos,\n",
" showfliers=False # Hides outliers\n",
")\n",
"\n",
"# Color each box according to georegions\n",
"for patch, color in zip(bplt['boxes'], [georegions[x]['c'] for x in all_pops]):\n",
" patch.set_facecolor(color)\n",
"\n",
"# Set axis limits and labels\n",
"ax.set_ylim([0, 1])\n",
"ax.set_ylabel(r'F$_w$$_s$')\n",
"ax.set_xlabel('Population')\n",
"\n",
"# Add x-axis labels\n",
"ax.set_xticks(pos)\n",
"ax.set_xticklabels(all_pops, rotation=45, ha='right')\n",
"\n",
"# Show plot\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AP6dfscuUTXS"
},
"source": [
"**Figure legend:** F*WS* scores per subpopulation in Pf8. We can see that African populations tend to have lower F*WS* , indicating that these samples tend to be formed of a mix of parasite strains. This is expected in a region like Africa, where malaria transmission is high. The exception is that Northeast Africa shows intermediate levels of sample clonality, more similar to South Asian populations. We see very clonal samples in South America, Southeast Asia, and Oceania."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CBVGlsc9hZbc"
},
"source": [
"## Save the figure"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "I4rgyE15hTYb",
"outputId": "714391fd-0f86-4d12-f747-d5fe9a1eacd2"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mounted at /content/drive\n"
]
}
],
"source": [
"# You will need to authorise Google Colab access to Google Drive\n",
"drive.mount('/content/drive')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"id": "gu8hE-cZhUuU"
},
"outputs": [],
"source": [
"# This will send the file to your Google Drive, where you can download it from if needed\n",
"# Change the file path if you wish to send the file to a specific location\n",
"# Change the file name if you wish to call it something else\n",
"\n",
"fig.savefig('/content/drive/My Drive/FWS_figure.pdf', bbox_inches='tight')\n",
"fig.savefig('/content/drive/My Drive/FWS_Figure.png', dpi=480, bbox_inches='tight') # increase the dpi for higher resolution"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bFj4z_mziME7"
},
"outputs": [],
"source": []
}
],
"metadata": {
"colab": {
"provenance": []
},
"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.11.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}