# Summary visualization showing the complete pipeline
if das_i:
fig, axes = plt.subplots(2, 2, figsize=(16, 12))
# 1. Raw precipitation forecast (top-left)
sample_raster.plot(ax=axes[0,0], cmap='Blues', add_colorbar=False)
adm0.boundary.plot(ax=axes[0,0], color='red', linewidth=2)
axes[0,0].set_title('1. Raw CHIRPS-GEFS Forecast\n(Single Day)')
axes[0,0].set_xlabel('Longitude')
axes[0,0].set_ylabel('Latitude')
# 2. Clipped time series (top-right)
da_i_clip.isel(valid_date=5).plot(ax=axes[0,1], cmap='Blues', add_colorbar=False)
adm0.boundary.plot(ax=axes[0,1], color='red', linewidth=2)
axes[0,1].set_title('2. Clipped to Cuba\n(Day 6 of 16)')
axes[0,1].set_xlabel('Longitude')
axes[0,1].set_ylabel('Latitude')
# 3. Time series analysis (bottom-left)
valid_dates_dt = pd.to_datetime(da_means.valid_date.values)
axes[1,0].plot(valid_dates_dt, da_means.values, 'ko-', linewidth=2)
axes[1,0].set_title('3. Temporal Analysis\n(2-Day Rolling Means)')
axes[1,0].set_xlabel('Valid Date')
axes[1,0].set_ylabel('Precipitation (mm/2-day)')
axes[1,0].grid(True, alpha=0.3)
axes[1,0].tick_params(axis='x', rotation=45)
# 4. Statistical distribution (bottom-right)
for i, (quantile, da_quantile) in enumerate(list(quantile_results.items())[:3]):
valid_dates_q = pd.to_datetime(da_quantile.valid_date.values)
axes[1,1].plot(valid_dates_q, da_quantile.values, 'o-',
label=f'{quantile*100:.0f}th percentile', linewidth=2)
axes[1,1].plot(valid_dates_dt, da_means.values, 'k-',
label='Mean', linewidth=3, alpha=0.8)
axes[1,1].set_title('4. Statistical Analysis\n(Quantiles + Mean)')
axes[1,1].set_xlabel('Valid Date')
axes[1,1].set_ylabel('Precipitation (mm/2-day)')
axes[1,1].legend()
axes[1,1].grid(True, alpha=0.3)
axes[1,1].tick_params(axis='x', rotation=45)
plt.suptitle(f'CHIRPS-GEFS Processing Pipeline Overview\nIssue Date: {issue_date.strftime("%Y-%m-%d")}',
fontsize=16, y=0.98)
plt.tight_layout()
plt.show()