85 lines
2.4 KiB
Plaintext
85 lines
2.4 KiB
Plaintext
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"id": "imports",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"import pandas as pd\n",
|
||
|
|
"import matplotlib.pyplot as plt\n",
|
||
|
|
"from pyprojroot import here"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"id": "load",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"data = pd.read_csv(here() / 'data/base/data.csv')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"id": "plot",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"# Calculate mean Bell parameter by country\n",
|
||
|
|
"country_stats = data.groupby('Country').agg({\n",
|
||
|
|
" 'Bell Parameter (S)': 'mean',\n",
|
||
|
|
" 'Study ID': 'count'\n",
|
||
|
|
"}).rename(columns={'Study ID': 'Count'}).sort_values('Bell Parameter (S)', ascending=False)\n",
|
||
|
|
"\n",
|
||
|
|
"fig, ax = plt.subplots(figsize=(14, 8))\n",
|
||
|
|
"\n",
|
||
|
|
"# Horizontal bar chart\n",
|
||
|
|
"countries = country_stats.index[:20] # Top 20\n",
|
||
|
|
"values = country_stats['Bell Parameter (S)'][:20]\n",
|
||
|
|
"counts = country_stats['Count'][:20]\n",
|
||
|
|
"\n",
|
||
|
|
"bars = ax.barh(range(len(countries)), values, color='steelblue', edgecolor='black')\n",
|
||
|
|
"\n",
|
||
|
|
"# Color bars by value\n",
|
||
|
|
"for i, (bar, val) in enumerate(zip(bars, values)):\n",
|
||
|
|
" if val > 2.8:\n",
|
||
|
|
" bar.set_color('#27ae60')\n",
|
||
|
|
" elif val > 2.7:\n",
|
||
|
|
" bar.set_color('#3498db')\n",
|
||
|
|
" else:\n",
|
||
|
|
" bar.set_color('#e67e22')\n",
|
||
|
|
"\n",
|
||
|
|
"# Add classical limit line\n",
|
||
|
|
"ax.axvline(x=2.0, color='red', linestyle='--', linewidth=2, alpha=0.7, label='Classical limit')\n",
|
||
|
|
"\n",
|
||
|
|
"# Add counts as text\n",
|
||
|
|
"for i, (val, count) in enumerate(zip(values, counts)):\n",
|
||
|
|
" ax.text(val + 0.01, i, f'n={int(count)}', va='center', fontsize=9)\n",
|
||
|
|
"\n",
|
||
|
|
"ax.set_yticks(range(len(countries)))\n",
|
||
|
|
"ax.set_yticklabels(countries)\n",
|
||
|
|
"ax.set_xlabel('Mean Bell Parameter (S)', fontsize=12)\n",
|
||
|
|
"ax.set_title('Mean Bell Parameter by Country (Top 20)', fontsize=14)\n",
|
||
|
|
"ax.legend()\n",
|
||
|
|
"ax.grid(True, alpha=0.3, axis='x')\n",
|
||
|
|
"\n",
|
||
|
|
"plt.tight_layout()\n",
|
||
|
|
"plt.savefig(here() / 'output/plots/world_map.png', dpi=300, bbox_inches='tight')"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"metadata": {
|
||
|
|
"kernelspec": {
|
||
|
|
"display_name": "Python 3",
|
||
|
|
"language": "python",
|
||
|
|
"name": "python3"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 5
|
||
|
|
}
|