fig, axes = plt.subplots(2, 2, figsize=(16, 12))
# 1. Top 15 - Índice de Desempenho
top15_desempenho = ranking_final.head(15)
bars1 = axes[0,0].barh(range(len(top15_desempenho)), top15_desempenho['Índice Desempenho'],
color='#16a085')
axes[0,0].set_yticks(range(len(top15_desempenho)))
axes[0,0].set_yticklabels(top15_desempenho.index, fontsize=8)
axes[0,0].set_xlabel('Índice de Desempenho')
axes[0,0].set_title('Top 15 - Índice de Desempenho Assistencial', fontweight='bold')
axes[0,0].grid(axis='x', alpha=0.3)
# 2. Dispersão: Desempenho vs Leitos Totais
axes[0,1].scatter(macro_analise['Leitos Totais'], macro_analise['Índice Desempenho'],
alpha=0.6, s=60, c=macro_analise['IDH Médio'], cmap='viridis')
axes[0,1].set_xlabel('Leitos Totais')
axes[0,1].set_ylabel('Índice de Desempenho')
axes[0,1].set_title('Desempenho vs Volume (Cor = IDH)', fontweight='bold')
axes[0,1].grid(True, alpha=0.3)
# 3. Box Plot do Índice por Região Geográfica
regioes_box = []
for regiao in macro_analise.index:
if regiao in df_merge['Macrorregião de Saúde'].values:
regiao_geo = df_merge[df_merge['Macrorregião de Saúde'] == regiao]['no_regiao'].iloc[0]
regioes_box.append((regiao, regiao_geo, macro_analise.loc[regiao, 'Índice Desempenho']))
df_box = pd.DataFrame(regioes_box, columns=['Macrorregião', 'Região', 'Índice'])
sns.boxplot(data=df_box, x='Região', y='Índice', ax=axes[1,0])
axes[1,0].set_title('Distribuição do Índice por Região Geográfica', fontweight='bold')
axes[1,0].tick_params(axis='x', rotation=45)
# 4. Heatmap de Correlações
corr_data = macro_analise[['Leitos Totais', 'Leitos/Município', '% SUS', 'IDH Médio',
'Índice Desempenho']].corr()
sns.heatmap(corr_data, annot=True, cmap='coolwarm', center=0, ax=axes[1,1],
fmt='.2f', cbar_kws={'shrink': 0.8})
axes[1,1].set_title('Matriz de Correlação', fontweight='bold')
plt.tight_layout()
plt.show()