Sobre este mapa
O que mostra este mapa?What does this map show?
Este mapa apresenta o preço médio diário de eletricidade (mercado day-ahead) para cada zona de licitação europeia, expresso em €/MWh.
As cores variam do roxo (preços negativos, evento raro de excesso de renovável) e azul (preços baixos), passando por amarelo e laranja, até ao vermelho escuro (preços mais altos). Esta paleta foi escolhida para boa acessibilidade a utilizadores daltónicos e para destacar visualmente eventos de preços negativos.
This map shows the daily average electricity price (day-ahead market) for each European bidding zone, expressed in €/MWh.
Colours range from purple (negative prices, a rare event of renewable oversupply) and blue (low prices), through yellow and orange, up to dark red (highest prices). This palette was chosen for good accessibility to colour-blind users and to visually highlight negative-price events.
Os valores são nas horas locais ou na hora de mercado?Are the values in local time or market time?
Pode escolher entre dois modos através do toggle Fuso no topo da página:
- 🌍 Hora local (default): os preços médios diários são calculados na hora local de cada zona de licitação. Por exemplo, um dia em Portugal (UTC+0/+1) não corresponde exatamente ao mesmo período UTC que um dia na Finlândia (UTC+2/+3). Esta é a forma como os preços são publicados pelas bolsas locais e pelo ENTSO-E.
- 🇪🇺 Hora de mercado (CET): todas as zonas são apresentadas alinhadas ao market day day-ahead europeu (CET 00:00 → 24:00). Isto permite comparar zonas no mesmo intervalo de mercado e elimina o aviso "(parcial até 23h)" para Portugal/Irlanda. Tecnicamente:
- 39 zonas em fuso CET (ES, FR, DE-LU, IT, NL, SE, NO, PL, etc.) não mudam — já estão alinhadas.
- PT e IE(SEM) (CET-1h) → recolhem a última hora do dia local anterior para completar o market day.
- BG, EE, FI, GR, LT, LV, RO (CET+1h) → recolhem a primeira hora do dia local seguinte para completar o market day.
Ou seja, a escolha só muda os números em 9 zonas — Portugal e Irlanda (CET−1) e Bulgária, Estónia, Finlândia, Grécia, Letónia, Lituânia e Roménia (CET+1). Nas outras 39 (já em CET) as duas opções mostram exatamente os mesmos valores. Passando o rato sobre cada botão do toggle aparece essa lista.
A escolha é guardada localmente (localStorage) e mantém-se entre visitas.
A base temporal ativa (Hora local ou Hora de mercado) é sempre indicada nos títulos e na legenda 🔗 de cada visualização.
You can choose between two modes via the Time zone toggle at the top of the page:
- 🌍 Local time (default): daily average prices are computed in each bidding zone's local time. For example, a day in Portugal (UTC+0/+1) does not match exactly the same UTC period as a day in Finland (UTC+2/+3). This is how prices are published by the local exchanges and by ENTSO-E.
- 🇪🇺 Market time (CET): all zones are shown aligned to the European day-ahead market day (CET 00:00 → 24:00). This lets you compare zones over the same market interval and removes the "(partial until 23:00)" note for Portugal/Ireland. Technically:
- 39 zones in the CET time zone (ES, FR, DE-LU, IT, NL, SE, NO, PL, etc.) do not change — they are already aligned.
- PT and IE(SEM) (CET-1h) → pull the last hour of the previous local day to complete the market day.
- BG, EE, FI, GR, LT, LV, RO (CET+1h) → pull the first hour of the next local day to complete the market day.
In other words, the choice only changes the numbers for 9 zones — Portugal and Ireland (CET−1) and Bulgaria, Estonia, Finland, Greece, Latvia, Lithuania and Romania (CET+1). For the other 39 (already on CET) both options show exactly the same values. Hovering each toggle button shows that list.
The choice is stored locally (localStorage) and persists across visits.
The active time basis (Local time or Market time) is always shown in the titles and in the 🔗 caption of each visualization.
O que mostra o toggle "Métrica" do mapa (incluindo os 15 minutos)?What does the map's "Metric" toggle show (including the 15 minutes)?
O toggle Métrica controla o número que cada zona mostra no mapa (cor + etiqueta). A tabela, os gráficos e os heatmaps mantêm-se sempre na média.
- 📊 Média (default): preço médio da zona no dia ou no período selecionado.
- 🔻 Mínimo / 🔺 Máximo: preço mínimo/máximo da zona no dia ou no período.
- 🕐 15 min: em vez de um agregado, mostra o preço de um intervalo de 15 minutos à escolha (o dataset é quarto-horário — 96 intervalos por dia). Aparece um seletor com slider, setas ❮ ❯ e botões ▶ Animar e ⏱ Agora. O ▶ Animar percorre sozinho os 96 intervalos em ciclo (~4 por segundo), para ver a onda de preços a atravessar a Europa; clicar de novo (ou mexer no slider/setas) pára. Com o slider focado, as setas ← → do teclado avançam intervalo a intervalo.
- 🟣 h ≤ 0: horas com preço zero ou negativo no dia ou no período (cada quarto de hora conta 0,25 h). A cor segue a média de horas por dia, para valer em qualquer período; a etiqueta mostra o total.
- 🔋 Spread: média das horas mais caras do dia menos a das mais baratas — o que uma bateria ganharia por ciclo diário, antes de perdas. As horas (1, 2 ou 4) escolhem-se junto à tabela; no período, é a média dos dias.
- ☀️ Captura solar / 💨 Captura eólica: o preço médio a que se vendeu a produção solar (ou eólica) do país, em % da média da zona no dia ou período. Abaixo de 100% (laranja a vermelho), essa produção vendeu-se mais barata do que a média, porque o sol ou o vento baixam o preço das horas em que produzem; acima de 100% (verde), mais cara. Só há dados desde 2026, e as zonas sem produção dessa fonte na ENTSO-E ficam a cinzento.
Em modo Diário, o valor é o preço efetivo desse intervalo. Nos modos Semanal / Mensal / Personalizado, é a média desse mesmo intervalo ao longo de todos os dias do período (por exemplo, quanto custa em média a eletricidade às 19:45).
O intervalo é lido no fuso ativo: em 🌍 Hora local, "19:45" é a hora local de cada zona; em 🇪🇺 Hora de mercado (CET), é o mesmo instante em toda a Europa. O botão ⏱ Agora usa o relógio da zona de referência ("🌍 A minha zona") ou o relógio CET, conforme o fuso escolhido.
Se uma zona ainda não tiver valor publicado nesse intervalo (ex: as últimas horas locais de Portugal antes do leilão seguinte), fica a cinzento e sem etiqueta. A métrica e o intervalo ficam guardados no browser e entram no link de partilha (?metric=slot&slot=79).
The Metric toggle controls the number each zone shows on the map (colour + label). The table, charts and heatmaps always stay on the average.
- 📊 Average (default): the zone's average price for the selected day or period.
- 🔻 Minimum / 🔺 Maximum: the zone's minimum/maximum price for the day or period.
- 🕐 15 min: instead of an aggregate, it shows the price of a 15-minute interval of your choice (the dataset is quarter-hourly — 96 intervals per day). A picker appears with a slider, ❮ ❯ arrows and the ▶ Play and ⏱ Now buttons. ▶ Play steps through all 96 intervals on a loop (~4 per second), so you can watch the price wave cross Europe; clicking again (or touching the slider/arrows) stops it. With the slider focused, the keyboard ← → arrows step one interval at a time.
- 🟣 h ≤ 0: hours with zero or negative price in the day or period (each quarter-hour counts 0.25 h). The colour follows the average hours per day, so it works for any period; the label shows the total.
- 🔋 Spread: average of the day's most expensive hours minus the cheapest — what a battery would earn per daily cycle, before losses. The hours (1, 2 or 4) are chosen next to the table; over a period, it is the average of the days.
- ☀️ Solar capture / 💨 Wind capture: the average price at which the country's solar (or wind) output was sold, as a % of the zone's average for the day or period. Below 100% (orange to red), that output sold cheaper than the average, because sun or wind push down the price of the hours they produce in; above 100% (green), dearer. Data only since 2026; zones with no output of that source in ENTSO-E are grey.
In Daily mode the value is the actual price for that interval. In Weekly / Monthly / Custom modes it is the average of that same interval across every day in the period (for example, how much electricity costs on average at 19:45).
The interval is read in the active time basis: under 🌍 Local time, "19:45" is each zone's local clock; under 🇪🇺 Market time (CET), it is the same instant across Europe. The ⏱ Now button uses the reference zone's clock ("🌍 My zone") or the CET clock, depending on the chosen time basis.
If a zone has no published value for that interval yet (e.g. Portugal's last local hours before the next auction), it stays grey and unlabelled. The metric and the interval are stored in the browser and included in the share link (?metric=slot&slot=79).
Porque é que o último dia pode ter valores provisórios?Why can the last day have provisional values?
O OMIE negoceia em Hora Central Europeia (CET), que é a hora de Espanha.
Como Portugal está uma hora "atrás" de Espanha (hora local PT = hora CET - 1), quando olhamos para os resultados do mercado diário (Day-Ahead) que são divulgados para o dia seguinte, o intervalo correspondente a 23:00 - 24:00 (hora de Portugal) é conhecido apenas no dia seguinte.
Quando tal acontece, é apresentado o aviso "até às 23h de PT" no título.
Se a zona de referência ("🌍 A minha zona") não for Portugal, o caso aplica-se na mesma às zonas em CET−1 (Portugal e Irlanda): em vez do aviso no título, essas zonas ficam marcadas com * e surge uma nota explicativa por baixo do mapa.
OMIE trades in Central European Time (CET), which is Spain's time.
Because Portugal is one hour "behind" Spain (PT local time = CET - 1), when we look at the day-ahead market results published for the next day, the interval corresponding to 23:00 - 24:00 (Portugal time) is only known the following day.
When this happens, the note "until 23:00 PT" is shown in the title.
If your reference zone ("🌍 My zone") is not Portugal, this still applies to the CET−1 zones (Portugal and Ireland): instead of the note in the title, those zones are marked with * and an explanatory note appears below the map.
O que são zonas de licitação?What are bidding zones?
A Europa está dividida em zonas de licitação (bidding zones) para o mercado de eletricidade. A maioria dos países tem uma única zona, mas alguns estão divididos em várias:
- Noruega: 5 zonas (NO1-NO5)
- Suécia: 4 zonas (SE1-SE4)
- Itália: 6 zonas (Norte, Centro-Norte, Centro-Sul, Sul, Sicília, Sardenha)
- Dinamarca: 2 zonas (DK1 Oeste, DK2 Este)
Europe is divided into bidding zones for the electricity market. Most countries have a single zone, but some are split into several:
- Norway: 5 zones (NO1-NO5)
- Sweden: 4 zones (SE1-SE4)
- Italy: 6 zones (North, Centre-North, Centre-South, South, Sicily, Sardinia)
- Denmark: 2 zones (DK1 West, DK2 East)
Visualizações disponíveisAvailable visualizations
- Mapa coroplético europeu: 47 zonas de licitação coloridas pelo preço médio. Etiquetas numéricas sobre cada zona (asterisco se dados parciais).
- Tabela ordenável: clica nos cabeçalhos para ordenar por preço, mín, máx, amplitude, Δ (vs a zona de referência), variação vs ontem. Mostra hora local do mín/máx por zona. A caixa "Mostrar horas com preço ≤ 0" acrescenta a coluna h ≤ 0: quantas horas o preço esteve a zero ou negativo no dia ou período (cada quarto de hora conta 0,25 h). A caixa "Mostrar spread de" acrescenta a coluna Spread de 1, 2 ou 4 h: a média das horas mais caras do dia menos a das mais baratas (no período, a média dos dias). "Mostrar variação vs ano anterior" compara com o mesmo dia ou período um ano antes. "Mostrar preço capturado" acrescenta o preço médio a que se vendeu a produção solar e a eólica de cada país (desde 2026; nas zonas de um mesmo país usa-se a produção do país) — abaixo da média da zona quando o sol ou o vento baixam o preço das horas em que produzem. "Mostrar acoplamento com a zona de referência" acrescenta a % dos quartos de hora em que cada zona teve o mesmo preço que a zona de referência (diferença até 0,01 €/MWh, comparados pelo mesmo instante): perto de 100% quando a interligação chega para unir os dois mercados, mais baixo quando fica cheia e os preços se separam. As zonas virtuais levam o selo virtual.
- Perfil diário de preços: gráfico de barras com a curva do dia da zona selecionada. Cores na mesma escala do mapa. Resolução adapta-se ao publicado pela bolsa (15 min, 30 min ou horário). Em modos agregados mostra a média horária do período. Linha vermelha tracejada em y=0 quando há valores negativos.
- Perfil diário por linha da tabela: clica no nome de uma zona (ou no chevron ▸) para abrir/fechar a curva do dia logo por baixo. Várias zonas em simultâneo para comparar.
- Curva de duração de preços: os preços do dia ou período ordenados do mais caro para o mais barato, para a zona e as comparações. Cada ponto diz que percentagem do tempo o preço esteve igual ou acima daquele valor; por cima, a mediana, os 10 % mais caros e mais baratos e as horas com preço ≤ 0.
- Gráfico de evolução de preços: barras coloridas pela escala do mapa para a zona selecionada. Mín, máx e amplitude sempre visíveis no tooltip. Suporta até 4 comparações simultâneas (linhas sobrepostas com cores distintas). A legenda abaixo do gráfico permite ativar/ocultar séries adicionais (default ocultas):
- MA7 — média móvel a 7 dias (ciclo semanal, requer ≥14 dias)
- MA30 — média móvel a 30 dias (ciclo mensal, requer ≥30 dias)
- Médias diárias (linha) — os mesmos valores das barras, em formato de linha grossa na cor da média do período (útil para sobrepor com comparações ou ver a tendência)
- Médias diárias — ano anterior — linha tracejada roxa com os valores diários do mesmo período há um ano (alinhados dia-a-dia)
- Média europeia — linha tracejada azul-petróleo com a média europeia de cada dia, pesada pelo consumo de cada país (como no resumo)
- Preço capturado solar / eólico — linhas âmbar e azul com o preço médio a que se vendeu, em cada dia, a produção solar e a eólica do país (desde 2026; o tooltip diz a % da média do dia)
- Heatmap horário (24h × ~30 dias): grelha de horas vs dias, em modo "mês deslizante" terminado no Dia final escolhido (entre 28 e 31 dias consoante o mês). Inclui coluna lateral com média por hora, linha inferior com média por dia e canto com média global. Em modo "↔ Largura total" mostra valores com 2 casas decimais. O tooltip de cada hora mostra os quartos de hora (nos dias publicados a 15 min) e o da média por hora, a média de cada quarto no período. Nos dias de mudança de hora, a hora que não existe aparece tracejada e a que se repete tem um contorno duplo e mostra a média das duas passagens.
- Perfil semanal (24h × 7 dias da semana): agrega todos os dias do período (30/60/90/365 dias) por dia da semana. Permite identificar padrões recorrentes ("sextas à noite são consistentemente mais caras", "domingos têm vale mais profundo de manhã"). Inclui as mesmas médias laterais e global. O tooltip mostra também a média de cada quarto de hora.
- Heatmap anual: calendário 12 meses × 31 dias, células coloridas pelo preço — clica num dia para abrir esse dia no mapa.
- Sparkline no mapa (info-control): ao passar o rato (desktop) ou tocar (mobile) numa zona, mini-perfil diário com marcadores mín/máx e barras coloridas.
- European choropleth map: 47 bidding zones coloured by the average price. Numeric labels over each zone (asterisk if data is partial).
- Sortable table: click the headers to sort by price, min, max, range, Δ (vs the reference zone), change vs yesterday. Shows the local time of the min/max per zone. The "Show hours with price ≤ 0" box adds the h ≤ 0 column: how many hours the price was zero or negative in the day or period (each quarter-hour counts 0.25 h). The "Show spread of" box adds the Spread column for 1, 2 or 4 h: the average of the day's most expensive hours minus the cheapest (over a period, the average of the days). "Show change vs previous year" compares with the same day or period one year earlier. "Show capture price" adds the average price at which each country's solar and wind output was sold (since 2026; zones of one country use the country's output) — below the zone's average when sun or wind push down the price of the hours they produce in. "Show coupling with the reference zone" adds the % of quarter-hours in which each zone had the same price as the reference zone (difference up to 0.01 €/MWh, compared at the same instant): close to 100% when interconnection is enough to join the two markets, lower when it is congested and prices split. Virtual zones carry the virtual tag.
- Daily price profile: bar chart with the day curve of the selected zone. Colours on the same scale as the map. Resolution adapts to what the exchange publishes (15 min, 30 min or hourly). In aggregated modes it shows the period's hourly average. Dashed red line at y=0 when there are negative values.
- Daily price profile per table row: click a zone's name (or the chevron ▸) to open/close the day curve right below it. Several zones at once for comparison.
- Price duration curve: the day's or period's prices sorted from most to least expensive, for the zone and the compared zones. Each point tells what share of the time the price was at or above that value; above it, the median, the top and bottom 10% and the hours with price ≤ 0.
- Price evolution chart: bars coloured by the map scale for the selected zone. Min, max and range always visible in the tooltip. Supports up to 4 simultaneous comparisons (overlaid lines in distinct colours). The legend below the chart lets you toggle extra series (hidden by default):
- MA7 — 7-day moving average (weekly cycle, requires ≥14 days)
- MA30 — 30-day moving average (monthly cycle, requires ≥30 days)
- Daily averages (line) — the same values as the bars, as a thick line in the period-average colour (useful to overlay with comparisons or see the trend)
- Daily averages — previous year — purple dashed line with the daily values of the same period a year ago (aligned day by day)
- European average — teal dashed line with each day's European average, weighted by each country's consumption (as in the summary)
- Solar / wind capture price — amber and blue lines with the average price at which the country's solar and wind output was sold each day (since 2026; the tooltip shows the % of the day's average)
- Hourly heatmap (24h × ~30 days): grid of hours vs days, in "rolling month" mode ending on the chosen End day (between 28 and 31 days depending on the month). Includes a side column with the average per hour, a bottom row with the average per day and a corner with the overall average. In "↔ Full width" mode it shows values with 2 decimals. Each hour's tooltip shows its quarter-hours (on days published at 15 min), and the hourly average's tooltip the average of each quarter over the period. On clock-change days, the hour that does not exist is hatched, and the repeated hour has a double outline and shows the average of both passes.
- Weekly profile (24h × 7 weekdays): aggregates every day in the period (30/60/90/365 days) by weekday. Helps identify recurring patterns ("Friday evenings are consistently more expensive", "Sundays have a deeper morning trough"). Includes the same side and overall averages. The tooltip also shows the average of each quarter-hour.
- Annual heatmap: a 12-month × 31-day calendar, cells coloured by price — click a day to open it on the map.
- Map sparkline (info-control): hovering (desktop) or tapping (mobile) a zone shows a mini daily price profile with min/max markers and coloured bars.
Interatividade e navegaçãoInteractivity and navigation
- Modos temporais: Diário (um dia), Semanal (7 dias), Mensal (mês deslizante terminado no dia selecionado — 28 a 31 dias conforme o mês) e Personalizado (intervalo à escolha). Médias agregadas no mapa, tabela, gráfico e perfil diário de preços.
- 🌍 A minha zona (zona de referência): seletor no topo da página que define a tua zona base — conduz a mensagem de comparação, a coluna Δ da tabela e a zona inicial dos gráficos. É guardada no browser e incluída no link de partilha (
?ref=). - Selector único de zona: um só dropdown "Zona" controla simultaneamente Evolução, Perfil diário de preços, Heatmap horário e Heatmap anual. Clicar numa zona do mapa atualiza tudo.
- Comparação multi-zona: chips com até 4 zonas adicionais comparadas no gráfico de evolução e no perfil diário de preços — cada uma com cor própria e linha distinta sobre as barras da zona principal. Cada chip mostra também o desfasamento de fuso horário face à zona principal (ex: +1h para ES quando a principal é PT). Os valores são apresentados em hora local de cada zona.
- Pesquisa de zona: campo "🔍 Procurar zona" filtra a tabela, destaca a zona no mapa e faz auto-zoom se for um único resultado. Procura por código e nome (PT e EN), e ignora acentos.
- Toque no mapa (mobile): tap único mostra o info-control (com o perfil diário de preços); segundo tap na mesma zona seleciona-a em todas as visualizações. Toque no fundo do mapa fecha o info-control.
- Validação do intervalo personalizado: o período aplica-se sozinho ao mudar uma data (ou ao carregar em Enter); datas inválidas (início > fim, fora do intervalo de dados, >366 dias) ficam com borda vermelha e mensagem inline e não mudam o período.
- Δ vs a zona de referência: coluna opcional na tabela (€/MWh e %) com a diferença de cada zona face à zona escolhida em "🌍 A minha zona". Útil para avaliar o custo de importar/exportar.
- Variação vs ontem: opcional na tabela em modo Diário, mostra como cada zona evoluiu face ao dia anterior.
- Indicador de dados parciais: zonas cujos últimos slots não foram ainda publicados (ex: PT antes do leilão CET de amanhã) ficam com asterisco no mapa e badge "parcial" na tabela/tooltip. Média/mín/máx usam só os slots conhecidos.
- Resumo dinâmico: texto contextual com a data (Hoje/Ontem/Amanhã/data), com a zona mais barata e mais cara em destaque, e a variação da zona de referência face à média europeia. A média europeia é pesada pelo consumo de eletricidade de cada país (o real; a previsão no dia seguinte; antes de 2026, o peso médio de cada país), e as zonas de um mesmo país contam pela média delas — assim a Noruega, com 5 zonas, não pesa mais do que a Alemanha. AL, MK e XK não têm dados de consumo e ficam de fora da média. As zonas virtuais de interligação (Itália SACOAC/SACODC e NO2NSL, sem consumidores) ficam de fora destas comparações, mas continuam na tabela. O mesmo para a IT-Calabria antes de 2021: até à reforma das zonas italianas, comportava-se como um polo virtual.
- Time modes: Daily (one day), Weekly (7 days), Monthly (rolling month ending on the selected day — 28 to 31 days depending on the month) and Custom (range of your choice). Aggregated averages on the map, table, chart and daily price profile.
- 🌍 My zone (reference zone): a selector at the top of the page that sets your base zone — it drives the comparison message, the table's Δ column and the initial chart zone. It is stored in the browser and included in the share link (
?ref=). - Single zone selector: a single "Zone" dropdown simultaneously controls Evolution, Daily price profile, Hourly heatmap and Annual heatmap. Clicking a zone on the map updates everything.
- Multi-zone comparison: chips with up to 4 additional zones compared on the evolution chart and the daily price profile — each with its own colour and a distinct line over the main zone's bars. Each chip also shows the time-zone offset relative to the main zone (e.g. +1h for ES when the main one is PT). Values are shown in each zone's local time.
- Zone search: the "🔍 Search zone" field filters the table, highlights the zone on the map and auto-zooms if there is a single result. Searches by code and name (PT and EN), ignoring accents.
- Map tap (mobile): a single tap shows the info-control (with the daily price profile); a second tap on the same zone selects it across all visualizations. Tapping the map background closes the info-control.
- Custom range validation: the period is applied as soon as a date changes (or on Enter); invalid dates (start > end, outside the data range, >366 days) get a red border and an inline message and leave the period unchanged.
- Δ vs the reference zone: optional table column (€/MWh and %) with each zone's difference against the zone chosen in "🌍 My zone". Useful to assess the cost of importing/exporting.
- Change vs yesterday: optional in the table in Daily mode, shows how each zone moved compared with the previous day.
- Partial-data indicator: zones whose last slots have not been published yet (e.g. PT before tomorrow's CET auction) get an asterisk on the map and a "partial" badge in the table/tooltip. Average/min/max use only the known slots.
- Dynamic summary: contextual text with the date (Today/Yesterday/Tomorrow/date), highlighting the cheapest and most expensive zone, and the reference zone's variation against the European average. The European average is weighted by each country's electricity consumption (actual; the forecast for the next day; before 2026, each country's average weight), and the zones of one country count as their average — so Norway, with 5 zones, does not weigh more than Germany. AL, MK and XK have no consumption data and are left out of the average. Virtual interconnector zones (Italy SACOAC/SACODC and NO2NSL, with no consumers) are left out of these comparisons but remain in the table. The same goes for IT-Calabria before 2021: until the Italian bidding-zone reform, it behaved like a virtual pole.
Personalização e atalhosCustomization and shortcuts
- Zonas favoritas: clica na estrela ☆ ao lado do nome para adicionar uma zona aos favoritos. Aparecem num painel "⭐ Favoritas" no topo da tabela com o preço atual e cor da escala. Click num chip seleciona a zona em todas as visualizações; × remove. Em desktop, podes arrastar os chips (⋮⋮) para reordenar. Persistidas no browser.
- Largura total (↔): botão no painel de zona faz com que as 4 visualizações (Perfil diário de preços, Evolução, Heatmap horário, Heatmap anual) ocupem toda a largura do ecrã. No heatmap horário, ativa formatação com 2 casas decimais nas células.
- Modo escuro: respeita a preferência do site (toggle no menu).
- Ecrã inteiro do mapa: botão no canto superior do mapa para visualização imersiva.
- Preferências persistidas: escolhas de zona, comparações, favoritas, modo, toggles, largura total — tudo guardado em localStorage.
- Atalhos de teclado:
- ← → — dia anterior / seguinte
- T — saltar para a data mais recente disponível
- / — focar campo de pesquisa de zona
- Esc — limpar pesquisa de zona
- Favorite zones: click the star ☆ next to a name to add a zone to favorites. They appear in a "⭐ Favorites" panel at the top of the table with the current price and scale colour. Clicking a chip selects the zone across all visualizations; × removes it. On desktop you can drag the chips (⋮⋮) to reorder. Persisted in the browser.
- Full width (↔): a button in the zone panel makes the 4 visualizations (Daily price profile, Evolution, Hourly heatmap, Annual heatmap) span the full screen width. In the hourly heatmap it enables 2-decimal formatting in the cells.
- Dark mode: follows the site preference (toggle in the menu).
- Map fullscreen: a button in the top corner of the map for an immersive view.
- Persisted preferences: zone choices, comparisons, favorites, mode, toggles, full width — all stored in localStorage.
- Keyboard shortcuts:
- ← → — previous / next day
- T — jump to the most recent available date
- / — focus the zone search field
- Esc — clear the zone search
Atualização e partilhaUpdates and sharing
- Indicador de frescura: badge ao lado do subtítulo mostra quão recente é a última atualização do dataset (verde <26h, amarelo 26-48h, vermelho >48h). O tooltip mostra a hora exata em UTC.
- Auto-refresh: ao voltar à tab depois de mais de 5 minutos sem foco, a página verifica silenciosamente se há dados mais recentes e refresca se necessário.
- Link de partilha: botão "🔗 Copiar link de partilha" gera URL com a data, modo e zona ativa — e também as comparações, o fuso, a métrica do mapa, as colunas opcionais da tabela e a ordenação. Partilha com 1 clique.
- Exportar CSV: o botão "⬇ Exportar CSV", por baixo da tabela, descarrega a tabela tal como está no ecrã (zonas visíveis, ordem e colunas). O botão "⬇ Exportar CSV dos quartos de hora", no Perfil diário de preços, descarrega o preço de cada quarto de hora da zona e das comparações no dia ou período, com a hora do relógio e o início em UTC. Separador ";", pronto para o Excel.
- Instalável (PWA): a página pode ser instalada como aplicação no telemóvel (Adicionar ao ecrã principal) ou desktop (ícone na barra do browser). Funciona com cache offline para conteúdo estático e visitas recentes.
- Freshness indicator: a badge next to the subtitle shows how recent the dataset's last update is (green <26h, yellow 26-48h, red >48h). The tooltip shows the exact time in UTC.
- Auto-refresh: when you return to the tab after more than 5 minutes unfocused, the page silently checks for newer data and refreshes if needed.
- Share link: the "🔗 Copy share link" button generates a URL with the active date, mode and zone — plus the comparisons, time base, map metric, the table's optional columns and its sort order. Share it in 1 click.
- Export CSV: the "⬇ Export CSV" button below the table downloads the table as shown (visible zones, order and columns). The "⬇ Export quarter-hour CSV" button in the Daily price profile downloads the price of each quarter-hour for the zone and the compared zones over the day or period, with the clock time and the start in UTC. ";" separator, ready for Excel.
- Installable (PWA): the page can be installed as an app on mobile (Add to Home Screen) or desktop (icon in the browser bar). It works with an offline cache for static content and recent visits.
De onde vêm os dados?Where does the data come from?
Os dados são obtidos diretamente da ENTSO-E Transparency Platform — a fonte oficial dos operadores de redes elétricas europeus (TSOs). Os preços day-ahead provêm das bolsas de eletricidade europeias (EPEX SPOT, Nord Pool, GME, OMIE, etc.) e são disponibilizados na resolução publicada pela respetiva bolsa (15 minutos para a maioria das zonas, horário para algumas).
Os dados são atualizados diariamente de forma automática.
Fronteiras das zonas: Electricity Maps (MIT License)
The data is obtained directly from the ENTSO-E Transparency Platform — the official source of the European electricity transmission system operators (TSOs). Day-ahead prices come from the European power exchanges (EPEX SPOT, Nord Pool, GME, OMIE, etc.) and are provided at the resolution published by each exchange (15 minutes for most zones, hourly for some).
The data is updated automatically every day.
Zone borders: Electricity Maps (MIT License)
Porque é que alguns países não têm dados?Why do some countries have no data?
Zonas a cinzento indicam ausência de dados para o dia selecionado. Isto pode acontecer porque:
- Os dados ainda não foram publicados
- A zona não participou no mercado nesse dia
- Houve uma falha temporária na recolha de dados
Zones in grey indicate no data for the selected day. This can happen because:
- The data has not been published yet
- The zone did not take part in the market that day
- There was a temporary failure in data collection