# Compare US vs France: pre-tax and post-tax Gini
decomp_countries = ['US', 'FR', 'DE', 'SE']
decomp = swiid.get_redistribution(decomp_countries,
start_year=2017, end_year=2022)
if not decomp.empty:
latest = (decomp.sort_values('year', ascending=False)
.groupby('country_code').first().reset_index())
latest = latest[latest['country_code'] != ''].set_index('country_code')
if 'US' in latest.index:
fig, ax = plt.subplots(figsize=(10, 6))
euro_countries = [c for c in decomp_countries if c != 'US' and c in latest.index]
for ec in euro_countries:
us_mkt = latest.loc['US', 'gini_mkt']
us_disp = latest.loc['US', 'gini_disp']
eu_mkt = latest.loc[ec, 'gini_mkt']
eu_disp = latest.loc[ec, 'gini_disp']
predist_gap = us_mkt - eu_mkt
us_redist = us_mkt - us_disp
eu_redist = eu_mkt - eu_disp
redist_gap = eu_redist - us_redist
total_gap = us_disp - eu_disp
print(f"\nUS vs {country_name(ec)}:")
print(f" Total disposable Gini gap: {total_gap:.3f}")
print(f" Due to predistribution (market income gap): {predist_gap:.3f} "
f"({predist_gap/total_gap*100:.0f}%)" if total_gap > 0 else "")
print(f" Due to redistribution (tax-transfer gap): {redist_gap:.3f} "
f"({redist_gap/total_gap*100:.0f}%)" if total_gap > 0 else "")
# Waterfall chart for US vs France
if 'FR' in latest.index:
us_mkt = latest.loc['US', 'gini_mkt']
us_disp = latest.loc['US', 'gini_disp']
fr_mkt = latest.loc['FR', 'gini_mkt']
fr_disp = latest.loc['FR', 'gini_disp']
categories = ['US\nMarket Gini', 'Predistribution\ngap',
'FR Market\nGini', 'US\nRedistribution',
'FR\nRedistribution',
'US\nDisposable', 'FR\nDisposable']
values = [us_mkt, -(us_mkt - fr_mkt), fr_mkt,
-(us_mkt - us_disp), -(fr_mkt - fr_disp),
us_disp, fr_disp]
x = [0, 1, 2, 4, 5, 7, 8]
colors_bar = ['#c75b5b', '#d98c3e', '#d98c3e',
'#4878a8', '#4878a8',
'#c75b5b', '#5a9e6f']
ax.bar(x, values, color=colors_bar, alpha=0.8, width=0.7)
ax.set_xticks(x)
ax.set_xticklabels(categories, fontsize=9)
ax.set_ylabel('Gini coefficient')
ax.set_title('Decomposing the US-France Inequality Gap', fontsize=14)
ax.axhline(y=0, color='black', linewidth=0.5)
# Add value labels
for xi, vi in zip(x, values):
ax.text(xi, vi + 0.01 * np.sign(vi), f'{vi:.3f}',
ha='center', va='bottom' if vi > 0 else 'top', fontsize=9)
plt.tight_layout()
save_figure(fig, '02_us_france_decomposition')
plt.show()
else:
print("SWIID redistribution data not available.")