Skip to content

Interactive

Milan from 1940 to today

Statistics updated monthly, going back to 1940.

Topics
climate · Milan · ERA5 · time series · reanalysis

ERA5 · Copernicus reanalysis

Milan, measured one day at a time since 1940.

Daily series from the ERA5 reanalysis, one value per day. Each band is a year: blue below the reference mean, red above.

Year
n/a
Mean
n/a
Anomaly
n/a

sweep the band

Annual anomaly · 1961-1990 baseline

How far the mean has moved

Each bar is the difference between that year's mean temperature and the mean over the 30-year period 1961-1990, the standard reference period of the World Meteorological Organization.

A single year tells you nothing. 1947 was scorching and 1956 was bitter, and that was happening well before anyone talked about emissions. What matters is where the centre of the distribution sits, and whether it moves.

Annual mean temperature anomaly against the reference 30-year period. Colour: ColorBrewer RdBu. The grey band is the 95% confidence interval on the slope, and it pivots on the centroid of the series.

The values appear here once the series has been read.

Ordinary linear regression assumes errors that are independent and normally distributed, an assumption never quite true of a climate series. Beside it sits the Theil-Sen estimator, taking the median of the slopes between every pair of years and needing no normality in the residuals, and beside that the Mann-Kendall test, non-parametric, answering one question: how likely a run this consistently one-directional would be if there were no trend at all. On independence neither of them helps. Autocorrelation between consecutive years inflates significance, and the intervals shown here carry no correction for it, so read the p value as indicative.

The Mann-Kendall verdict on the period the series covers appears here once the data have been read.

Daily maxima · two 30-year periods compared

What used to be rare is now ordinary

The same days, counted. On the left the first 30-year period of the series, on the right the last. Same city, same grid cell, same model.

The curve keeps its shape. It slides. The slide tells most in the right tail, where the extreme days sit: a modest shift of the bell changes how many of those days there are by a good deal.

Distribution of daily maximum temperatures, 1 °C bins, given as days per year so the two 30-year periods can be compared.

The values appear here once the series has been read.

SU30 · TR20 · FD · fixed-threshold counts

Counting the days

Annual means invite argument. The number of nights that never dropped below 20 degrees invites a lot less: either that night happened or it did not.

These are counts of days against a fixed threshold, of the same family as the indices set out by the Expert Team on Climate Change Detection and Indices at the World Meteorological Organization. FD follows the ETCCDI definition. SU30 and SU35 raise the summer-day threshold, which ETCCDI puts at 25 °C, and TR20 counts a night whose minimum lands exactly on 20 degrees. The thresholds used here are written out in the method table, so the count can be redone under the same rule.

The line is the Theil-Sen estimator. Each index uses the threshold declared in the method table.

The values appear here once the series has been read.

Daily records by decade

Which way the records fall

For every day in the calendar there is a year in which that day was the warmest on record, and a year in which it was the coldest. Here they are counted by decade.

In a stable climate the two colours come out even, and records grow rarer as time passes, because beating an ever longer archive takes an ever more extreme value.

For each calendar day present in the series, the year that recorded the highest maximum and the lowest minimum. Ties go to the earlier occurrence. An asterisk marks a decade that is not complete.

The values appear here once the series has been read.

Rainfall · annual total and Rx1day

Where the data prove nothing

Two rainfall indicators: the annual total and the highest total in a single day.

Rainfall behaves differently from temperature: it swings a great deal from one year to the next, and pulling a signal out of it takes a longer series than the thermometer needs. The verdict below comes from the same Mann-Kendall test used on temperature.

The statistical verdict on rainfall is computed in the browser and appears here alongside the charts.

Cross-checks

The objections

Four are reasonable and deserve an answer from the numbers on this page. One makes no sense and gets said anyway.

It is the urban heat island. Milan has grown, concrete holds heat.

The objection is serious, and against an urban weather station it would land. The figure here does not come from a thermometer inside the city.

ERA5 is a reanalysis: a global atmospheric model on a grid of about 25 kilometres that assimilates observations from stations, radiosondes, aircraft, buoys and satellites. The cell used here covers Milan and the plain around it, and the way the model describes the surface does not follow the city's building growth year by year. The warming you see cannot be produced by blocks of flats the model does not know exist.

Use the Brera thermometer instead of the reanalysis and you would be measuring climate and heat island added together, at which point the objection becomes fair again. That is why this page uses ERA5.

The data have been massaged.

I have not touched the series above. It comes from the Copernicus archive through the Open-Meteo API, and you will find it below as a file to download, together with the exact queries that produced it.

On method: every calculation, means, anomalies, regressions, significance tests, runs in this page's JavaScript, in your browser, on the raw data. Open the source and read it.

On completeness: the series covers consecutive days with no gaps in the calendar, and incomplete years are kept out of every annual statistic. The exact count appears here once the data have been read.

The climate has always changed. There was an ice age.

True, and nobody denies it. The question here is how fast it is changing now, and what is pushing it.

Global mean temperature between a glacial maximum and an interglacial is small in absolute terms, but it builds up over thousands of years. The rate measured on this series appears here once the data have been read.

Glacial to interglacial swings are measured in thousands of years. The fastest transitions documented in ice cores run on scales of centuries. What is on this page covers a stretch of time one person has lived through from end to end.

It was hot in 1947 too, and 2003 was worse.

Both are real years, and you can see them in the anomaly chart, standing well clear of the years around them.

2003 is still one of the warmest years in the series. Where exactly it sits in the ranking, and how many later years have passed it, appear here once the data have been read.

The comparison between 2003 and the normal of the reference 30-year period, and between 2003 and the current normal, appears here once the data have been read.

It is the sun, it is the solar cycles.

This page holds no solar irradiance data, so I am not going to answer with numbers of my own.

The total solar irradiance (TSI) reconstructions from PMOD/WRC in Davos and from NASA's TSIS mission are public and cover the satellite era from 1978. Set them against the chart above.

Data, method, limits

Where these numbers come from

The exact request that produced this series, the methods applied to it and the limits of the data. The full series can be downloaded below.

The source

The values appear here once the series has been read.

The query

The models=era5 parameter is not optional. Without it the API picks the best model available and from 2017 switches to ECMWF IFS at 9 km. Changing model halfway through a series introduces an artificial step in exactly the recent years that are under discussion.

The exact query that produced this series appears here once the data have been read.

 

The statistical methods

Anomaly baseline
1961-1990
Regression
ordinary least squares, 95% CI from Student's t
Robust estimator
Theil-Sen, median of the slopes across every pair
Trend test
two-sided Mann-Kendall with a correction for ties
SU30
days with a maximum temperature ≥ 30 °C
TR20
nights with a minimum temperature ≥ 20 °C
FD
days with a minimum temperature < 0 °C
Rx1day
highest daily rainfall of the year
Colour scale
ColorBrewer RdBu reversed, diverging and safe for colour blindness
Where the maths runs
in your browser, on the raw daily values

The limits

A reanalysis is a model constrained by observations, not a direct measurement. The grid cell is about 25 kilometres on a side and takes in the hinterland as well as the city, so absolute values can sit apart from those of an urban station. Far fewer observations were assimilated in 1940 than are assimilated today, which leaves the early decades less constrained by the data and more dependent on the model. None of these limits works in a way that would manufacture a rising trend out of nothing.

What to cite

    The values appear here once the series has been read.

    Processing and page: the calculations run in the browser on the raw data.

    What these numbers do not say

    ERA5 is a reanalysis: a weather model constrained by the observations assimilated for each date, so every daily value here is a reconstruction rather than a thermometer reading taken in Milan (Milano). The grid cell is a quarter of a degree, on the order of twenty-five kilometres, and it stands for that whole area, so any one neighbourhood's microclimate disappears into the average. Urban heat island warming reaches the series only in part, because the built fabric of the city sits below the resolved scale. What you read here is Milan over the period shown; a local slope does not extrapolate to the planet, and observational coverage in the early decades is thinner than it is today.

    Methods and applicable ranges

    • Ordinary least squares regression, with confidence interval Range: Returns one average slope over the selected window. It holds while the underlying trend is roughly linear and the residuals are not strongly autocorrelated. The 95 per cent interval covers sampling uncertainty in the slope, not the error carried in from the reanalysis upstream. Over short windows the interval widens until it contains zero, and the slope stops telling you anything. An exceptional year at either end of the period moves the line further than the same year would move it from the middle.
    • Theil-Sen estimator Range: The median of the slopes taken across every pair of points. It assumes a monotone trend and needs no normality in the residuals, so outlying years move it far less than they move least squares. The slope comes out in the same units as the regression line, so the two compare directly. A wide gap between Theil-Sen and least squares is the sign that a handful of years is driving the result, and it is worth looking at which ones.
    • Mann-Kendall test Range: Detects whether a monotone trend is present, upward or downward, without assuming it is linear. It does not quantify the slope; it reports how unlikely the observed sign would be in a series with no trend at all. Seasons need separate treatment, or the annual cycle leaks into the count of concordant pairs. Autocorrelation between consecutive years inflates significance, so read the p value as indicative. A non-significant result says the data cannot rule out chance, which is a different statement from saying there is no trend.
    • ETCCDI climate indices Range: Internationally agreed definitions for counting summer days, tropical nights, frost days and the like, either against fixed thresholds in degrees or against percentiles of the 1961-1990 baseline. Fixed thresholds let different cities be compared, while percentiles measure departure from the local climate of the reference period. A fixed-threshold count is sensitive to the threshold itself. When daily maxima bunch up near thirty degrees, a few tenths move many days across the line, and the count then rises faster than the mean temperature does.

    Primary references

    1. Hersbach, H., Bell, B., Berrisford, P., Biavati, G., Horányi, A., Muñoz Sabater, J., Nicolas, J., Peubey, C., Radu, R., Rozum, I., Schepers, D., Simmons, A., Soci, C., Dee, D., Thépaut, J.-N. (2023) ERA5 hourly data on single levels from 1940 to present Copernicus Climate Change Service (C3S) Climate Data Store (CDS) doi:10.24381/cds.adbb2d47 ↗
    2. Hersbach, H., Bell, B., Berrisford, P., et al. (2020) The ERA5 global reanalysis Quarterly Journal of the Royal Meteorological Society, 146(730) doi:10.1002/qj.3803 ↗
    3. Zippenfenig, P. (2023) Open-Meteo.com Weather API Zenodo doi:10.5281/zenodo.7970649 ↗
    4. Copernicus Climate Change Service (2019) Licence to Use Copernicus Products, version 1.2 ECMWF https://apps.ecmwf.int/datasets/licences/copernicus/ ↗
    5. Mann, H. B. (1945) Nonparametric Tests Against Trend Econometrica, 13(3) doi:10.2307/1907187 ↗
    6. Sen, P. K. (1968) Estimates of the Regression Coefficient Based on Kendall's Tau Journal of the American Statistical Association, 63(324) doi:10.1080/01621459.1968.10480934 ↗
    7. Zhang, X., Alexander, L., Hegerl, G. C., Jones, P., Klein Tank, A., Peterson, T. C., Trewin, B., Zwiers, F. W. (2011) Indices for monitoring changes in extremes based on daily temperature and precipitation data WIREs Climate Change, 2(6) doi:10.1002/wcc.147 ↗

    Data provenance

    • Open-Meteo Historical Weather API ↗ Licence: CC BY 4.0 on the API data, AGPLv3 on the source code. The free API is limited to non-commercial use within 10,000 calls a day, 5,000 an hour and 600 a minute; commercial use requires a paid plan. Weather data by Open-Meteo.com, with a link to https://open-meteo.com/ next to every point where the data is shown.
    • ERA5, Copernicus Climate Change Service (C3S) Climate Data Store ↗ Licence: Licence to Use Copernicus Products, version 1.2 (November 2019). Art. 4.1: free, worldwide, non-exclusive, royalty free and perpetual. Art. 5.1.1: attribution is mandatory in the required formula. Generated using Copernicus Climate Change Service information 2026

    Contact

    Let’s work together

    Tell me about your project: e-commerce, custom development or AI integrations. I reply within 48 hours.