Files
qu-en/notebooks/plot_visibility_distance.ipynb
Jalmari Tuominen 60e6abc831 Initial
2025-11-27 08:59:35 +02:00

70 lines
2.0 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",
"import numpy as np\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": [
"fig, ax = plt.subplots(figsize=(10, 6))\n",
"\n",
"# Color by detector type\n",
"colors = {'APD': 'steelblue', 'SNSPD': 'coral', 'PMT': 'green', 'SPAD': 'purple'}\n",
"for detector in data['Detector Type'].unique():\n",
" mask = data['Detector Type'] == detector\n",
" ax.scatter(data[mask]['Distance (m)'], data[mask]['Visibility (%)'],\n",
" label=detector, alpha=0.7, s=100, color=colors.get(detector, 'gray'),\n",
" edgecolors='black', linewidth=1)\n",
"\n",
"# Fit and plot trend line\n",
"z = np.polyfit(data['Distance (m)'], data['Visibility (%)'], 1)\n",
"p = np.poly1d(z)\n",
"x_trend = np.linspace(data['Distance (m)'].min(), data['Distance (m)'].max(), 100)\n",
"ax.plot(x_trend, p(x_trend), 'r--', linewidth=2, alpha=0.5, label=f'Trend (slope={z[0]:.2f})')\n",
"\n",
"ax.set_xlabel('Photon Pair Distance (m)', fontsize=12)\n",
"ax.set_ylabel('Visibility (%)', fontsize=12)\n",
"ax.set_title('Visibility vs. Photon Pair Distance', fontsize=14)\n",
"ax.legend(loc='best')\n",
"ax.grid(True, alpha=0.3)\n",
"\n",
"plt.tight_layout()\n",
"plt.savefig(here() / 'output/plots/visibility_distance.png', dpi=300, bbox_inches='tight')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}