TBB cluster explorer

How one day of satellite measurements over a stretch of Japanese coast becomes clusters of locations, and how those clusters are checked against the map. The scans run from 2024-03-03 09:00 → 2024-03-04 08:50 JST (all on 2024-03-03 in UTC).

1Measurements—
matrix4,719 locations × 142 saved scenes
2Saved 2D views—
pcaSaved PCA view
tsneSaved t-SNE views
umapSaved UMAP views
3Live clustering—
kmeansCluster the chosen 2D view
4Check—
mapCompare clusters on the map
curveCheck the original temperature curves
Measurements—
Saved 2D views—
Live clustering—
Check—

Data source. A table of brightness temperatures (TBB) supplied by two students, with separate lists of latitudes and longitudes. Each row is one grid location's values through the day. Where the data came from, how they were checked and how they may be used are set out on the Himawari-9 AHI Dataset page.

Notebook lineage

How we obtained it
PC5251 Applied Machine Learning and Data Science, final project 'Satellite Data Analysis', submitted through the course LMS in May 2024.
Notebook file
MLproject.ipynb · recorded date 2024-05-05

How this demo differs. The students' notebook first double-centres the table (removes each row's and each column's average), reduces it with PCA to 30 components and clusters the locations in that 30-dimensional space. This demo skips the centring, adds t-SNE and UMAP, and clusters in whichever 2D view you choose.

What a row and a column are here

Size of the data table (design matrix) given to PCA, t-SNE and UMAP

—

Each row is one grid location and each column is one satellite scan, so each cell holds one location's brightness temperature in one scan. This table is all the methods receive: not the coordinates that place a row on the map, and no labels, because the dataset has none. Values are in kelvin (K).

4 719
rows · grid locations
142
columns · timestamped scans
39 × 121
map grid · latitudes × longitudes
258.3–321.6
K · range of all cells

How the table is built

  • A row is one fixed location. Row X[i,:] holds that location's 142 brightness temperatures in time order: the daily curve drawn in the “Across one row” panel.
  • A column is one scan. Column X[:,j] holds the values of all 4 719 locations at one moment. Laid back onto the 39 × 121 grid, it rebuilds the image in the “Down one column” panel.
  • A cell x_ij is one brightness temperature in kelvin, stored as the value × 100, rounded to an integer. Across the whole table the cells run 258.3–321.6 K.
  • Nothing is removed or filled in. All 4 719 locations and all 142 available scans are kept. The 2 time slots with no scan are simply left out as columns, and no value is estimated to stand in for them.

The matrix itself

The three panels show the same table three ways: all of it, one row and one column. Row X[i,:] is one location through the day; column X[:,j] is one scan across all locations; where they cross, x_ij is a single brightness temperature. Move either slider, or click the image, and all three panels follow the selection.

The whole matrix: locations × time

A schematic, not the data: each square stands for a block of about 429 rows and 13 columns.

X[i,:] → curve X[:,j] → image x_ij

Selected cell x_2360,37 = 286.81 K: the selected location in the selected scan. No answer column (target y) sits beside the table, because the dataset has no labels.

X[i,:] this 24-hour curve

Across one row → one location's day

Read along a row and you get one location's brightness temperature through the day.

Selected row: 35.89 °N, 140.60 °E · daily average 280.4 K · range 273.1–293.8 K.

X[:,j] this one scene

Down one column → one complete satellite image

Lay a column's values back onto the latitude–longitude grid and you rebuild that scan's image.

140.00 °E141.20 °E
≤ 270.3 K≥ 300.3 K

Selected column: 2024-03-03 15:10 JST (2024-03-03 06:10 UTC) · values in this scan span 280.7–297.2 K. North is up (36.08 °N at the top, 35.70 °N at the bottom). Click a point on the image to select its row.

How the colours are scaled. The scan image uses one colour range for every scan: 270.3–300.3 K, from the 2nd to the 98th percentile of all 670 098 values in the table. Because the range is shared by every scan, a colour change while you drag the time slider is a real rise or fall, not a rescaling. The 3.7 % of values outside the range (the full table runs 258.3–321.6 K) are drawn in the end colours. The curve panel keeps a fixed vertical axis for the same reason, so curves of different rows can be compared by eye.

The selected row and column as numbers

Row X[i,:]

column jJSTUTCTBB (K)
109:0000:00285.00
209:1000:10285.58
309:2000:20285.98
409:3000:30286.86
509:4000:40287.88
609:5000:50288.50
710:0001:00289.40
810:1001:10290.37
910:2001:20290.99
1010:3001:30291.13
1110:4001:40291.77
1210:5001:50292.13
1311:0002:00292.48
1411:1002:10292.44
1511:2002:20292.79
1611:3002:30292.79
1711:5002:50293.43
1812:0003:00293.39
1912:1003:10292.52
2012:2003:20293.77
2112:3003:30292.48
2212:4003:40291.95
2312:5003:50291.86
2413:0004:00291.08
2513:1004:10290.80
2613:2004:20290.56
2713:3004:30290.56
2813:4004:40290.56
2913:5004:50289.80
3014:0005:00289.80
3114:1005:10290.09
3214:2005:20289.45
3314:3005:30288.80
3414:4005:40288.04
3514:5005:50287.83
3615:0006:00287.24
3715:1006:10286.81
3815:2006:20286.37
3915:3006:30285.41
4015:4006:40285.24
4115:5006:50284.83
4216:0007:00284.41
4316:1007:10283.50
4416:2007:20283.12
4516:3007:30282.22
4616:4007:40281.83
4716:5007:50281.42
4817:0008:00280.60
4917:1008:10280.04
5017:2008:20279.68
5117:3008:30278.72
5217:4008:40278.49
5317:5008:50278.11
5418:0009:00277.95
5518:1009:10277.56
5618:2009:20277.72
5718:3009:30277.40
5818:4009:40277.32
5918:5009:50277.48
6019:0010:00276.92
6119:1010:10276.84
6219:2010:20276.76
6319:3010:30276.76
6419:4010:40276.76
6519:5010:50276.92
6620:0011:00276.51
6720:1011:10276.68
6820:2011:20276.68
6920:3011:30276.92
7020:4011:40277.08
7120:5011:50276.84
7221:0012:00276.59
7321:1012:10276.84
7421:2012:20276.92
7521:3012:30276.76
7621:4012:40276.68
7721:5012:50276.59
7822:0013:00276.68
7922:1013:10276.43
8022:2013:20276.18
8122:3013:30276.18
8222:4013:40276.43
8322:5013:50276.68
8423:0014:00276.43
8523:1014:10276.10
8623:2014:20276.18
8723:3014:30275.07
8823:5014:50275.15
8900:0015:00274.71
9000:1015:10274.89
9100:2015:20275.41
9200:3015:30275.33
9300:4015:40275.33
9400:5015:50275.59
9501:0016:00275.50
9601:1016:10275.24
9701:2016:20275.24
9801:3016:30275.24
9901:4016:40275.24
10001:5016:50275.07
10102:0017:00274.80
10202:1017:10274.62
10302:2017:20274.71
10402:3017:30274.62
10502:4017:40274.53
10602:5017:50274.26
10703:0018:00274.08
10803:1018:10273.80
10903:2018:20273.71
11003:3018:30273.62
11103:4018:40273.71
11203:5018:50273.34
11304:0019:00273.24
11404:1019:10273.52
11504:2019:20273.52
11604:3019:30273.43
11704:4019:40273.24
11804:5019:50273.52
11905:0020:00273.34
12005:1020:10273.52
12105:2020:20273.90
12205:3020:30273.62
12305:4020:40273.15
12405:5020:50273.24
12506:0021:00273.15
12606:1021:10273.62
12706:2021:20273.99
12806:3021:30274.44
12906:4021:40274.98
13006:5021:50275.24
13107:0022:00275.93
13207:1022:10276.59
13307:2022:20277.24
13407:3022:30278.26
13507:4022:40278.87
13607:5022:50279.82
13708:0023:00280.60
13808:1023:10281.36
13908:2023:20281.89
14008:3023:30282.93
14108:4023:40283.74
14208:5023:50284.41

Column X[:,j], summarised by latitude band

latitude bandmean (K)min (K)max (K)
36.08 °N288.45284.59294.14
36.07 °N288.11282.93293.61
36.06 °N287.80282.93293.56
36.05 °N287.64280.74293.89
36.04 °N287.54280.74293.89
36.03 °N287.67280.85293.89
36.02 °N287.73280.89294.23
36.01 °N287.87280.67294.23
36.00 °N287.94282.29293.85
35.99 °N287.98282.29293.85
35.98 °N288.15282.93293.85
35.97 °N288.34284.71293.49
35.96 °N288.66284.71293.47
35.95 °N289.04284.59296.60
35.94 °N289.16284.59296.60
35.93 °N289.16284.59296.60
35.92 °N289.39284.65296.33
35.91 °N289.39284.65296.33
35.90 °N289.33284.65294.31
35.89 °N289.36284.65294.27
35.88 °N289.34284.65294.27
35.87 °N289.03284.53294.56
35.86 °N288.97284.53294.56
35.85 °N288.76284.89294.64
35.84 °N288.73284.89294.64
35.83 °N288.72284.89294.64
35.82 °N288.49284.53294.06
35.81 °N288.48284.53294.06
35.80 °N288.59283.50294.64
35.79 °N288.60283.50294.64
35.78 °N288.67283.50295.30
35.77 °N288.66283.68297.16
35.76 °N288.82283.68297.16
35.75 °N289.43285.06294.50
35.74 °N289.53285.06294.23
35.73 °N289.60285.06294.23
35.72 °N289.81284.65295.75
35.71 °N289.73284.65295.75
35.70 °N289.39284.89295.59

Next: this table, and nothing else, goes to the embedding methods in stage 2.

6
C1 · coldest mean TBBCk · warmest

Three ways to flatten a 142-number row into two

What this step does. Each location is described by 142 numbers, one per scan. To look at all 4,719 locations at once, each method squeezes those 142 numbers into two, so every location becomes a dot on a flat chart, called an embedding. Locations with similar daily curves end up near each other. The methods keep different things: PCA keeps the directions along which the locations differ most overall; t-SNE and UMAP try to keep each location's nearest neighbours close. All three start from the same rows, so differences between the pictures come from the methods, not the data. K-means then splits the dots of the selected embedding into k clusters, shown in colour.

PCA

PC1 × PC2 · 97.6 % of variance

t-SNE

perplexity 30

UMAP

n_neighbors 15 · min_dist 0.5

11 precomputed embeddings are stored in this page: 1 PCA, 5 t-SNE (one per perplexity) and 5 UMAP (one per n_neighbors value). The outlined panel is the one used for the map, curves and tables below. Hover over a dot to see its location; click it to use that embedding and highlight the dot's cluster everywhere.

How the embeddings were made
Every embedding was computed once, in advance, and stored in this page. Changing perplexity or n_neighbors swaps in another stored embedding of the same rows. t-SNE was run on the first 30 principal components of the table, UMAP on the full table.
Cluster sizes and average temperatures for each embedding
clusterPCA nPCA mean Kt-SNE nt-SNE mean KUMAP nUMAP mean K
C1230280.30774280.19848280.49
C21 351280.50736280.96904280.82
C31 209281.56733281.39644281.14
C4143284.23693281.88683282.79
C5909285.08877285.25756285.48
C6877286.70906286.57884286.55

Current settings: t-SNE · perplexity 30 · k = 6. Change them in the Embeddings section.

Back to the map, back to the curve

The check uses information the methods never saw: place each location's cluster at its real map position, and look at the original curves of its members. If the colours trace the coastline, the clustering has picked up real structure in the measured infrared signal.

Geographic view

Each dot is one location at its real position, coloured by its cluster and drawn at 55 % opacity over an OpenStreetMap basemap of 35.70–36.08 °N, 140.00–141.20 °E. The methods never saw the positions or the basemap. Click a cluster button or a dot to show one cluster; lower the point opacity to see the coastline.

TBB time series

4 719 locations

The thick line is the average curve of the 4 719 selected locations. The shaded band shows where the middle 80 % of them lie at each moment (10th to 90th percentile), and the thin lines are up to 40 individual curves picked at even intervals. With one cluster selected, the grey “scene mean” line is the average of all locations. The band shows how much the locations differ from one another.

Each cluster as numbers: size, share, average position and temperature range
clusterlocationssharemean latitudemean longitudemean TBB (K)range of location averages (K)
C177416.4 %35.85 °N140.47 °E280.19279.4 – 281.1
C273615.6 %35.87 °N140.27 °E280.96280.3 – 282.1
C373315.5 %35.92 °N140.58 °E281.39279.1 – 286.3
C469314.7 %35.87 °N140.17 °E281.88280.5 – 284.0
C587718.6 %35.84 °N140.94 °E285.25283.5 – 287.0
C690619.2 %35.98 °N140.99 °E286.57283.2 – 289.9
The plotted curve as numbers — one row per scan
time (JST)selection mean (K)p10 (K)p90 (K)all-location mean (K)
09:00290.25285.12299.24290.25
09:10290.12285.24299.13290.12
09:20289.55285.35294.27289.55
09:30289.25285.52293.09289.25
09:40289.55285.35293.94289.55
09:50289.89285.24294.76289.89
10:00290.39285.24295.87290.39
10:10291.25285.41296.94291.25
10:20291.69285.47297.79291.69
10:30291.90285.47298.33291.90
10:40292.34285.47299.27292.34
10:50292.50285.41299.88292.50
11:00292.81285.47300.52292.81
11:10293.17285.58301.14293.17
11:20293.49285.52301.71293.49
11:30293.93285.64302.40293.93
11:50295.03285.70304.37295.03
12:00294.40285.70303.01294.40
12:10294.03285.75302.36294.03
12:20293.77285.75301.93293.77
12:30293.57285.75301.41293.57
12:40293.39285.75301.17293.39
12:50293.19285.74300.81293.19
13:00292.95285.64300.42292.95
13:10292.78285.70300.15292.78
13:20292.53285.64299.76292.53
13:30292.28285.58299.31292.28
13:40292.04285.58298.75292.04
13:50291.74285.58298.29291.74
14:00291.41285.52297.75291.41
14:10291.11285.47297.12291.11
14:20290.75285.41296.42290.75
14:30290.37285.47295.64290.37
14:40289.94285.41295.00289.94
14:50289.54285.41294.22289.54
15:00289.14285.35293.52289.14
15:10288.72285.24292.79288.72
15:20288.32285.24291.95288.32
15:30287.82285.15291.03287.82
15:40287.33285.00290.18287.33
15:50286.78284.89289.11286.78
16:00286.30284.71288.14286.30
16:10285.70284.23287.14285.70
16:20285.15283.55286.92285.15
16:30284.59282.85286.81284.59
16:40283.98282.09286.70283.98
16:50283.44281.22286.65283.44
17:00282.89280.39286.65282.89
17:10282.38279.53286.65282.38
17:20281.82278.64286.54281.82
17:30281.35277.88286.37281.35
17:40281.06277.40286.37281.06
17:50280.80276.92286.31280.80
18:00280.66276.59286.37280.66
18:10280.44276.35286.31280.44
18:20280.27276.10286.20280.27
18:30280.17275.76286.37280.17
18:40280.07275.59286.26280.07
18:50279.98275.41286.26279.98
19:00279.87275.24286.26279.87
19:10279.74275.07286.20279.74
19:20279.63274.80286.26279.63
19:30279.51274.62286.26279.51
19:40279.40274.53286.20279.40
19:50279.23274.26286.20279.23
20:00279.15274.17286.15279.15
20:10279.27274.17286.26279.27
20:20279.32274.26286.15279.32
20:30279.31274.17286.20279.31
20:40279.31274.17286.15279.31
20:50279.28274.17286.09279.28
21:00279.20273.99286.09279.20
21:10279.24274.08286.03279.24
21:20279.23274.08286.03279.23
21:30279.24274.17286.03279.24
21:40279.23274.17286.03279.23
21:50279.26274.17285.98279.26
22:00279.28274.17286.03279.28
22:10279.24274.17285.92279.24
22:20279.23274.17285.98279.23
22:30279.20274.17285.98279.20
22:40279.24274.17286.09279.24
22:50279.24274.08286.09279.24
23:00279.19273.99286.15279.19
23:10279.10273.90286.20279.10
23:20279.01273.62286.20279.01
23:30278.43273.05285.98278.43
23:50278.53272.96285.98278.53
00:00278.40272.76285.92278.40
00:10278.42272.76286.03278.42
00:20278.51272.86286.15278.51
00:30278.39272.67286.15278.39
00:40278.29272.47286.03278.29
00:50278.23272.37286.03278.23
01:00278.18272.27285.98278.18
01:10278.09272.08285.92278.09
01:20277.98271.98285.92277.98
01:30277.92271.88285.92277.92
01:40277.82271.67285.87277.82
01:50277.73271.57285.81277.73
02:00277.69271.47285.87277.69
02:10277.65271.37285.87277.65
02:20277.59271.37285.87277.59
02:30277.50271.06285.92277.50
02:40277.44271.06285.87277.44
02:50277.43271.06285.92277.43
03:00277.37270.95285.92277.37
03:10277.28270.85285.92277.28
03:20277.20270.64285.92277.20
03:30277.18270.64285.87277.18
03:40277.15270.64285.98277.15
03:50277.10270.53285.98277.10
04:00277.05270.42285.87277.05
04:10276.98270.32285.87276.98
04:20276.90270.21285.81276.90
04:30276.93270.32285.92276.93
04:40276.88270.21285.92276.88
04:50276.84270.10285.98276.84
05:00276.78269.99285.98276.78
05:10276.81269.88285.98276.81
05:20276.82269.88285.98276.82
05:30276.78269.88286.03276.78
05:40276.69269.77285.98276.69
05:50276.67269.77285.98276.67
06:00276.70269.77286.03276.70
06:10276.85270.10286.15276.85
06:20277.15270.53286.20277.15
06:30277.50271.16286.31277.50
06:40277.98271.88286.37277.98
06:50278.46272.67286.20278.46
07:00279.06273.80286.26279.06
07:10279.67274.80286.48279.67
07:20280.42275.93286.59280.42
07:30281.23277.08286.65281.23
07:40281.94278.30286.70281.94
07:50282.67279.31286.65282.67
08:00283.41280.36286.70283.41
08:10284.05281.49286.59284.05
08:20284.71282.55286.65284.71
08:30285.51283.68287.08285.51
08:40286.13284.38288.19286.13
08:50286.78284.71289.35286.78

Next: the Conclusions section compares the clusterings of the three embeddings and measures how well they line up on the map. To change the settings, go to the Embeddings section.

What this analysis establishes

Listed from most to least important for how you should read the result. The numbers under each point are recomputed for the current settings, so if you change k or the embedding, they change too.

Neighbouring locations usually fall in the same cluster, though the computer never saw coordinates.

K-means sees only the two embedding coordinates of each location: no latitude, no longitude, no list of neighbours. If the clusters had nothing to do with geography, two side-by-side grid locations would share a cluster only as often as chance predicts from the cluster sizes. They share one far more often than that, which is why the map check in the Map and curve section is worth making.

side-by-side locations in the same cluster: 90.2 % of 9 278 pairs · expected by chance at these cluster sizes: 16.8 % · t-SNE, k = 6

The clusters depend on which embedding you pick.

The three methods start from the same rows but produce three different pictures, and clustering each picture gives three different sets of clusters. The adjusted Rand index measures how well two sets of clusters agree: 1 means identical, 0 means no better than chance.

adjusted Rand index at k = 6 · PCA vs t-SNE 0.51 · t-SNE vs UMAP 0.49 · PCA vs UMAP 0.40

Two dimensions already keep almost all the variation, even with the simplest method.

PCA is the simplest, linear method, and on this table its first two components already keep almost all of the variation. t-SNE and UMAP make the picture easier to look at, but on this dataset they are not recovering variation that PCA missed.

PC1 + PC2 hold 97.6 % of the variance of the 4 719 × 142 matrix

Glossary

What each term means on this page — for this grid, this band and this day — rather than in general. The science background, from the satellite observation to the data table, is collected here too.

From the satellite to this matrix

Himawari-9

The geostationary meteorological satellite that made these observations. It holds a fixed longitude over the equator and rescans East Asia on a repeating schedule, which is why one location can be followed through a whole day at 10-minute steps.

Advanced Himawari Imager (AHI)

The instrument aboard it. AHI scans in several spectral bands; this demo uses one of them.

Band 7

The infrared channel used here, centred at 3.83 µm.

Radiance

What the detector actually measures: energy arriving per unit area, solid angle and wavelength. Brightness temperature is calculated from it.

Brightness temperature (TBB)

The temperature an ideal black body (an object whose glow depends only on its temperature) would need to emit the measured radiance in this band. Over opaque cloud it describes the cloud top; over clear sky it is influenced by the surface. Across this table it runs 258.3–321.6 K.

Crop and stack

The preprocessing that produced the matrix: keep the 39 × 121 grid cells over the coastal box, keep every scan the archive holds for the day, and stack them into one table. That table is the design matrix.

The dataset, as used here

Grid location (grid node)

One cell of the latitude–longitude grid, 0.01° by 0.01°. There are 4 719 of them and each one is exactly one row of X.

Scene / scan / column

One complete image of the box at one instant. 142 of them are present; a complete day would hold 144.

Housekeeping gap

A scheduled slot in which the full-disk scan is suspended, so no image exists. 2 such slots fall inside this day, which is why the columns are not evenly spaced and why every column carries its own timestamp.

JST

Japan Standard Time, nine hours ahead of UTC. Every clock label on this page is JST; the tables also print the UTC timestamp the payload actually stores. The scans on this page are 2024-03-03 09:00 → 2024-03-04 08:50 JST, which is the single UTC day 2024-03-03.

Design matrix X

The 4 719 × 142 table of brightness temperatures. Rows are samples (locations), columns are features (scans). There is no target column.

Row, column, cell

X[i,:] is one location's day; X[:,j] is one scene; x_ij is one temperature. The three colours in the Design matrix section always appear beside that notation, so the encoding survives without colour.

Kelvin scaling

The payload stores each cell as an integer of the source value × 100 to keep the file small. The page divides it back out and shows the value in kelvin (K).

The methods

Unsupervised learning

Learning from inputs with no answer key. Nothing is trained to predict a known answer, so results are checked for internal consistency and against independent information, such as the map.

PCA

Principal component analysis: rotates the data onto new axes ordered by how much of the variation each one captures; this page draws the first two. Distances and directions in a PCA picture are meaningful, and the first two components hold 97.6 % of this matrix's variance.

t-SNE

A nonlinear method that keeps each point's nearest neighbours close together. Here it is fitted on the first thirty principal components, not on the raw columns.

Perplexity

The t-SNE setting for roughly how many neighbours each point takes into account. 5 values are precomputed: 5, 15, 30, 50, 100.

UMAP

Another nonlinear neighbourhood method, fitted here on the raw matrix. It tends to produce tighter, more separated groups than t-SNE from the same data.

n_neighbors

The UMAP parameter setting the size of the neighbourhood it treats as local. 5 values are precomputed: 5, 15, 30, 50, 100. UMAP's other setting, min_dist = 0.5, is held fixed across all of them; it controls how tightly points are allowed to pack together in the embedding, not what is neighbouring what.

Embedding

A 2-D coordinate pair per location produced by one of those methods. All 11 embeddings on this page were computed offline; the browser only reads them.

K-means

Partitions points into k groups by repeatedly assigning each point to the nearest group centre and recomputing the centres. It is the only fit that runs in the browser, using k-means++ initialisation and a fixed seed so the same k always gives the same picture.

k

The number of clusters, set by the reader between 2 and 40.

Cluster relabelling

After K-means, groups are renumbered C1…Ck by ascending mean TBB, so C1 is always the coldest group and the blue-to-red cluster colours mean the same thing in every panel and in every method. The convention is the original notebook's, which also sorts its clusters by ascending cluster mean.

Adjusted Rand index

A number comparing two partitions of the same points: 1 when they agree completely, 0 at the agreement chance alone would produce. The Conclusions section uses it to compare the three embeddings' clusterings.

Neighbour agreement

The share of side-by-side grid cells that fall in the same cluster. It is the page's own measure of how spatially coherent a partition is, compared against the chance level implied by the cluster sizes.

Reading the pictures

Diverging cluster ramp

The cluster colours run blue → red, from the coldest group C1 to the warmest group Ck, because the underlying quantity is ordered and what a reader is actually comparing is hot against cold. The same scale carries the clusters everywhere they appear: the three embedding scatters, the chips, the map, the curve panel and every table swatch. Neighbouring clusters can look alike; the tables beside each coloured panel give the exact values.

Sequential ramp

A second, one-ended blue scale, used only for the scan image in the Design matrix section. It encodes a brightness temperature in Kelvin rather than a cluster, which is why it does not share the clusters' blue-to-red scale.

Percentile stretch

The colour range used by the scan image in the Design matrix section: the 2nd to 98th percentile of every cell in the matrix (270.3–300.3 K), computed once and reused for every timestamp, with the few cells beyond either end clamped. It exists because the extremes of the matrix are rare enough to flatten every individual scene if the ramp is stretched to them.

Table twin

Every colour-encoded panel on this page ships a table of the same numbers, behind a disclosure or beside the chart. Colour is the summary; the table is the evidence.

p10–p90 band

On the curve panel, the range containing the middle 80 % of the selected locations at each moment, showing how much they differ from one another.

Basemap

A static OpenStreetMap image, fetched once at build time, cropped to the data box and embedded in this file. It serves only as a backdrop for judging the clusters.

Selection

Clicking a dot, a cluster button or a point on the map isolates one cluster across the embeddings, the map and the curves at once. Escape, or “All clusters”, clears it.