import matplotlib.pyplot as plt
import numpy as np

# 1. Definizione dei dati aggiornati (Valori in Mld Smc)
# L'anno 2025 fa riferimento alle stime consolidate di chiusura
years = ['2023', '2024', '2025*']
gasdotti = np.array([45.1, 44.4, 40.4])
gnl = np.array([16.6, 15.0, 20.9])
produzione = np.array([3.0, 2.9, 2.7])
stoccaggi = np.array([-3.1, -2.9, -2.7])

# Calcolo del totale netto immesso in rete (Somma algebrica inclusi gli stoccaggi negativi)
totals = gasdotti + gnl + produzione + stoccaggi

# 2. Configurazione dell'area del grafico
fig, ax = plt.subplots(figsize=(9, 6.5))

# Mappatura esatta dei colori del grafico originale
colors = {
    'gasdotti': '#63b145',    # Verde
    'gnl': '#3d526e',         # Blu scuro / Antracite
    'produzione': '#f37023',  # Arancione
    'stoccaggi': '#ffcb05'    # Giallo
}

# 3. Costruzione delle barre impilate (Stacked Bars)
width = 0.4  # Larghezza delle colonne
bars_gas = ax.bar(years, gasdotti, label='Gasdotti', color=colors['gasdotti'], width=width)
bars_gnl = ax.bar(years, gnl, bottom=gasdotti, label='GNL', color=colors['gnl'], width=width)
bars_prod = ax.bar(years, produzione, bottom=gasdotti+gnl, label='Produzione nazionale', color=colors['produzione'], width=width)
bars_stoc = ax.bar(years, stoccaggi, label='Stoccaggi', color=colors['stoccaggi'], width=width)

# 4. Inserimento dei valori numerici all'interno delle barre
for i in range(len(years)):
    # Valore Gasdotti (al centro della sezione verde)
    ax.text(i, gasdotti[i]/2, f'{gasdotti[i]:.1f}', ha='center', va='center', color='white', fontweight='bold', fontsize=11)
    
    # Valore GNL (al centro della sezione blu)
    ax.text(i, gasdotti[i] + gnl[i]/2, f'{gnl[i]:.1f}', ha='center', va='center', color='white', fontweight='bold', fontsize=11)
    
    # Valore Produzione Nazionale (al centro della sezione arancione)
    ax.text(i, gasdotti[i] + gnl[i] + produzione[i]/2, f'{produzione[i]:.1f}', ha='center', va='center', color='white', fontweight='bold', fontsize=10)
    
    # Valore Stoccaggi (riquadro giallo sotto la linea dello zero o parzialmente fluttuante come in origine)
    ax.text(i, stoccaggi[i]/2, f'{stoccaggi[i]:.1f}', ha='center', va='center', color='black', fontweight='bold', fontsize=10,
            bbox=dict(facecolor=colors['stoccaggi'], edgecolor='none', pad=2))
    
    # Box superiore con il riepilogo del totale (Stesso stile dell'immagine originale)
    total_text = f"GY {years[i]}\n{totals[i]:.1f} Mld Smc"
    ax.text(i, gasdotti[i] + gnl[i] + produzione[i] + 4, total_text, ha='center', va='bottom', color='black',
            fontweight='bold', fontsize=11, bbox=dict(facecolor='white', edgecolor='black', boxstyle='square,pad=0.4'))

# 5. Ottimizzazione stilistica ed etichette
ax.set_title('Fonti di Approvvigionamento Italia - Mld Smc\n(Dati Aggiornati ed Estimativi)', fontsize=14, fontweight='bold', pad=25, color='#333333')
ax.set_ylabel('Mld Smc', fontsize=12)
ax.set_ylim(-10, 85)  # Margini per accogliere i valori sotto lo zero e i box in alto

# Linea dello zero evidenziata e griglia orizzontale di sfondo
ax.axhline(0, color='black', linewidth=0.8)
ax.grid(axis='y', linestyle='-', alpha=0.4)
ax.set_axisbelow(True)

# Posizionamento della legenda in basso
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.12), ncol=4, frameon=False, fontsize=11)

# Pulizia dei bordi esterni superflui
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)

# 6. Salvataggio del file sul computer
plt.tight_layout()
plt.savefig('fonti_approvvigionamento_aggiornato.png', dpi=300)
plt.show()
print("Grafico generato e salvato come 'fonti_approvvigionamento_aggiornato.png'")

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: