Created
February 16, 2026 09:39
-
-
Save geoand/8a58be89ee6098f19f2c5be80e7efcc8 to your computer and use it in GitHub Desktop.
Euribor 3-Month Interest Rate Chart (1996-2026) - Python source code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import matplotlib.pyplot as plt | |
| import matplotlib.dates as mdates | |
| from datetime import datetime | |
| # Euribor 3-month data (annual averages) | |
| data_raw = [ | |
| ('1996-01-01', 5.81), ('1997-01-01', 4.39), ('1998-01-01', 3.81), | |
| ('1999-01-01', 2.95), ('2000-01-01', 4.40), ('2001-01-01', 4.26), | |
| ('2002-01-01', 3.32), ('2003-01-01', 2.33), ('2004-01-01', 2.11), | |
| ('2005-01-01', 2.19), ('2006-01-01', 3.08), ('2007-01-01', 4.28), | |
| ('2008-01-01', 4.64), ('2009-01-01', 1.22), ('2010-01-01', 0.81), | |
| ('2011-01-01', 1.39), ('2012-01-01', 0.57), ('2013-01-01', 0.22), | |
| ('2014-01-01', 0.21), ('2015-01-01', -0.02), ('2016-01-01', -0.26), | |
| ('2017-01-01', -0.33), ('2018-01-01', -0.32), ('2019-01-01', -0.36), | |
| ('2020-01-01', -0.43), ('2021-01-01', -0.55), ('2022-01-01', 0.35), | |
| ('2023-01-01', 3.43), ('2024-01-01', 3.50), ('2025-01-01', 2.25), | |
| ('2026-01-01', 2.05) | |
| ] | |
| dates = [datetime.strptime(d, '%Y-%m-%d') for d, r in data_raw] | |
| rates = [r for d, r in data_raw] | |
| fig, ax = plt.subplots(figsize=(14, 7)) | |
| # Fill areas for positive and negative rates | |
| ax.fill_between(dates, rates, 0, where=[r >= 0 for r in rates], alpha=0.3, color='green', label='Positive rates') | |
| ax.fill_between(dates, rates, 0, where=[r < 0 for r in rates], alpha=0.3, color='red', label='Negative rates') | |
| # Main line | |
| ax.plot(dates, rates, 'b-', linewidth=2, marker='o', markersize=4) | |
| # Zero line | |
| ax.axhline(y=0, color='black', linestyle='-', linewidth=0.5) | |
| # Annotations for key events | |
| ax.annotate('Euro Launch', xy=(datetime(1999,1,1), 2.95), xytext=(datetime(1999,6,1), 5), | |
| arrowprops=dict(arrowstyle='->', color='gray'), fontsize=9) | |
| ax.annotate('Financial Crisis', xy=(datetime(2008,1,1), 4.64), xytext=(datetime(2006,1,1), 6), | |
| arrowprops=dict(arrowstyle='->', color='gray'), fontsize=9) | |
| ax.annotate('First Negative Rates', xy=(datetime(2015,1,1), -0.02), xytext=(datetime(2012,6,1), -1.5), | |
| arrowprops=dict(arrowstyle='->', color='gray'), fontsize=9) | |
| ax.annotate('All-time Low -0.58%', xy=(datetime(2021,1,1), -0.55), xytext=(datetime(2018,6,1), -1.8), | |
| arrowprops=dict(arrowstyle='->', color='gray'), fontsize=9) | |
| ax.annotate('Post-COVID Spike', xy=(datetime(2023,1,1), 3.43), xytext=(datetime(2023,6,1), 5.5), | |
| arrowprops=dict(arrowstyle='->', color='gray'), fontsize=9) | |
| ax.set_xlabel('Year', fontsize=12) | |
| ax.set_ylabel('Euribor 3-Month Rate (%)', fontsize=12) | |
| ax.set_title('Euribor 3-Month Interest Rate (1996-2026)', fontsize=14, fontweight='bold') | |
| ax.grid(True, alpha=0.3) | |
| ax.legend(loc='upper right') | |
| ax.xaxis.set_major_locator(mdates.YearLocator(5)) | |
| ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y')) | |
| ax.set_xlim(datetime(1995,6,1), datetime(2026,6,1)) | |
| ax.set_ylim(-2, 7) | |
| plt.tight_layout() | |
| plt.savefig('euribor_30_years.png', dpi=150, bbox_inches='tight') | |
| print('Chart saved to euribor_30_years.png') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment