covid_matplotlib_01.py

text/x-python
"""
Cumulative Deaths by Presidential Administration

Static matplotlib visualization comparing COVID-19 deaths
during Trump and Biden administrations.

Run with: python covid_matplotlib_01.py
"""

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime

from covid_data_prep import prepare_full_dataset, TRANSITION_DATE


print("Loading data...")
full_data = prepare_full_dataset()

# Filter to national data
national = full_data[full_data['state'] == 'National'].copy().sort_values('date')

# Calculate cumulative deaths from daily deaths
national['cumulative_deaths'] = national['daily_deaths'].cumsum()

# Define analysis periods
trump_start = datetime(2020, 3, 1)
biden_analysis_end = datetime(2022, 5, 11)

# Filter to analysis period
chart_data = national[
    (national['date'] >= trump_start) & 
    (national['date'] <= biden_analysis_end)
].copy()

# Split by administration
trump_data = chart_data[chart_data['date'] < TRANSITION_DATE]
biden_data = chart_data[chart_data['date'] >= TRANSITION_DATE]

# Create figure
fig, ax = plt.subplots(figsize=(14, 8))

# Colors
trump_color = '#E74C3C'
biden_color = '#3498DB'

# Plot cumulative deaths
ax.plot(trump_data['date'], trump_data['cumulative_deaths'], 
        color=trump_color, linewidth=3, label='Trump Administration')

ax.plot(biden_data['date'], biden_data['cumulative_deaths'], 
        color=biden_color, linewidth=3, label='Biden Administration')

# Presidential transition line
ax.axvline(x=TRANSITION_DATE, color='black', linestyle='-', 
           linewidth=2, alpha=0.8)

# Calculate statistics
trump_final_deaths = trump_data['cumulative_deaths'].iloc[-1]
biden_final_deaths = biden_data['cumulative_deaths'].iloc[-1]
biden_period_deaths = biden_final_deaths - trump_final_deaths

# Annotations
ax.annotate(f'Trump era:\n{trump_final_deaths:,.0f} deaths\n(327 days)', 
            xy=(datetime(2020, 8, 1), (trump_final_deaths + biden_final_deaths)/3),
            fontsize=11, ha='center', va='center',
            bbox=dict(boxstyle="round,pad=0.3", facecolor=trump_color, alpha=0.1))

ax.annotate(f'Biden era:\n{biden_period_deaths:,.0f} additional deaths\n({(biden_analysis_end - TRANSITION_DATE).days} days)', 
            xy=(datetime(2021, 8, 1), (trump_final_deaths + biden_final_deaths)/3),
            fontsize=11, ha='center', va='center',
            bbox=dict(boxstyle="round,pad=0.3", facecolor=biden_color, alpha=0.1))

ax.annotate('Presidential\nTransition\nJan 20, 2021', 
            xy=(TRANSITION_DATE, trump_final_deaths),
            xytext=(datetime(2021, 3, 1), trump_final_deaths - 50000),
            arrowprops=dict(arrowstyle='->', color='black', alpha=0.7),
            fontsize=10, ha='center')

# Styling
ax.set_title('COVID-19 Deaths in the United States\nCumulative Deaths by Presidential Administration', 
             fontsize=16, fontweight='bold', pad=20)
ax.set_xlabel('Date', fontsize=12, fontweight='bold')
ax.set_ylabel('Cumulative Deaths', fontsize=12, fontweight='bold')

# Format axes
ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, p: f'{x/1000:.0f}K'))
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=2))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b\n%Y'))

# Grid and styling
ax.grid(True, alpha=0.2, linestyle='-')
ax.set_facecolor('#FAFAFA')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

ax.legend(loc='upper left', fontsize=11, frameon=False)

plt.tight_layout()
plt.savefig('01_cumulative_deaths.png', dpi=300, bbox_inches='tight')
print("Saved: 01_cumulative_deaths.png")
plt.show()
Maths.pm, par

pointcarre.app

Codes sources
Logo licence AGPLv3
Contenus
Logo licence Creative Commons