BEV Trajectories • Gallery

BEV Trajectories

Tracking the electric vehicle transition — country by country, month by month.

Open Gallery

For each market, monthly new-car registration data is fitted to a generalized S-curve model. The result describes how far along a country is in its BEV transition — not a forecast, but a real-time snapshot of the transition as it stands today.

Browse

Gallery

Filter charts by country, date, and type. Click any chart to zoom. "Latest only" shows the current state of each market without historical clutter.

Browse

World Map

See BEV share geographically. Color-coded by transition stage — useful for spotting regional patterns at a glance.

Rankings

Thresholds

When does a market cross 20%, 50%, or 80% BEV share? Computed from the fitted curve, sortable and exportable.

Rankings

Durations

How long does it take to move from one share level to another — e.g. 20% → 80%? Comparable across all markets.

DIY Curves

Builder

Aggregate curves for custom country groups — by region, weight class, or any selection. The global bottom-up trajectory lives here.

DIY Curves

Compare

Put multiple countries side by side on the same chart. Useful for spotting which markets lead, lag, or have stalled.

Browse

Data sources ↗

Where each country's numbers come from — the upstream registry or portal, what they count, and the caveats to watch. One page per country.

S-curves, not noise

BEV adoption follows a structured transition: slow start, acceleration once a tipping point is passed, then gradual stabilisation toward 100%. An S-shape fits this pattern consistently — and breaks visibly when the data doesn't support a transition.

Weibull formulation

The model uses a generalized Weibull-style logistic curve with two free parameters — enough flexibility to capture asymmetric transitions (early-heavy vs. late-heavy) without overfitting. Market size is used as a weight so large-volume months aren't dominated by small-market outliers.

Not a forecast

The curve represents the best fit to today's data. When new registrations arrive, the curve updates. This is a description of what has happened so far — "if things simply continued from here" — not a statement about the future.

Spain's BEV Transition Is Two Stories — and the Gap Is Wider Than Italy's

The promised sequel. Split Spain's DGT registrations by channel and the mid-table headline number falls apart: non-rental buyers run a ~11.5-year transition — outpacing all of South Korea — while the rental third of the market sits frozen on a fifty-year curve, buying hybrids for the tourist season. Plus: the diesel-to-hybrid migration, the two charging networks, and the solar card nobody plays.

Read article →

Italy's Slow BEV Transition Is Really Two Stories

Split the data and you see it's not the people of Italy. Strip out the rental fleets and the transition time drops from ~25 years to ~17 — Spain/Korea territory. The rental market is effectively frozen, and the reason is infrastructure tourists can't work around.

Read article →

FAQ

Submit Data

Add a new monthly data point or correct an existing one. The form opens a pull request against the country's CSV in this repo, the maintainer reviews and merges, then triggers the render Action — your numbers appear on the page within a few minutes after merge. Multiple rows (multiple months / corrections) can ship in one submission.

Feedback & Questions

Found a bug? Question about the data? Idea for how something could be shown better? Just let me know — no account required. Replies appear right here, visible to everyone.

All categories 🐛 Bug ❓ Question 💡 Idea ⚠️ Data error 💬 Comment All statuses Open Answered Resolved

New topic

Markdown supported. Max. 4,000 characters.
Drag & drop or click to attach (PNG, JPG, GIF, WebP · max 2 MB)
Tab, filters, current settings… (show)

      
Spam guard, no tracking.
Heads up: Your submission is displayed publicly on the site and cannot be edited after posting. Please do not include personal data, email addresses, or similar.

Thresholds (years)

Export current table

Choose a custom threshold, then sort the table. Use the variant filter to include multiple categories. Default selects “New Cars”. Exports reflect your current filter and custom setting.
Color coding: green = threshold already reached; red = 80% threshold after Jan 2035.

Loading params.csv

Data freshness

Which month each country's data currently runs to, when it last arrived, and when the next point is due. Due and late are measured against the source's own publication window — the days our fetcher polls — so a country is never flagged before its publisher has actually released. Hand-maintained sources have no such window and are marked by hand rather than judged.

Loading sources/schedule.json

Where the next points land

The day of the month each source's publication window opens — the earliest a new figure can appear. Fetchers keep polling after that until the data shows up, so this marks the start of each window, not every polling day.

Durations (time to move between thresholds)

Export current table

This view shows the projected time to progress from one market share threshold to another. Columns include 20→80%, 10→90%, a user‑defined X→Y%, and the model’s numerical speed at the inflection point (slope of the tangent). Values are computed client‑side from params.csv. Rows with a trailing-12-month BEV share below 1%, or whose curve has no inflection (v2 ≤ 1) or whose peak adoption rate stays under 1 percentage-point per year, are flagged as ”shows no transition”.
Indonesia’s fitted parameters round to almost zero in CSV precision, so the table reconstructs them on the fly by anchoring the model to the most recent observation — its entries can therefore be off by a few months in either direction.

Loading params.csv

Transition Time Interval

Export

Each bar shows the modelled time span from the From% to the To% BEV share; the dot marks the Mid dot% threshold. Bars truncated at the right edge (➜) indicate the transition continues beyond the visible window. Defaults: 20 / 50 / 80%. Hover a bar for exact years.

Loading params.csv

Region / World Curve Builder

This builder aggregates national BEV transition models into regional or global curves. Multiple countries are stacked into a single trajectory.
Aggregation is weighted by market size using weights.csv, ensuring that large markets dominate the result while small markets contribute proportionally.
The x-axis uses index time internally (see t0 parameter). Minor rounding artefacts are expected due to time conversion and general limitation while rounding, since these calculations run client side on your device.
The builder defaults to passenger cars (= New Cars) (4-Wheelers = legacy for India) in case there are no parameters for a variant like HDV or Vans.
If the variant exists (for example in Thresholds or Durations Tab), then the Builder will create the variant curve.

Compare Curves

Side-by-side comparison of 2–3 curves. Each slot can be an individual country (including a specific variant like Italy · Rental) or an aggregated region (e.g. EU, World), weighted by weights.csv like in Builder. The powertrain selector switches all slots together — you can only compare BEV vs. BEV, ICE vs. ICE, or PHEV vs. PHEV (no mixing). The Variant (groups) selector applies only to aggregate slots; individual country slots carry their own variant.

Raw Data

The country CSVs, drawn. One bar per period, each summing the trailing N months ending there — rolling, the way the TTM charts roll. Nothing here is modelled: every number is a number that is in data/<Country>.csv, or a sum of such numbers.

What the bands mean. BEV is battery-electric; PHEV plug-in hybrid; HEV a full hybrid that does not plug in; Hybrid a combined bucket where the source does not separate those two; ICE combustion that the source does not split into petrol and diesel; Other a category the source reports but does not name (LPG, CNG, fuel-cell). Where a source only started splitting a category out partway through, the later band is folded back into the one it used to be counted in — otherwise the chart shows a cliff that is a change of definition, not of market. Selecting a second country collapses both to whatever they can both fill; the footnote says which collapse was applied. A period is drawn only where the window is a whole multiple of the coarsest observation inside it, so a quarterly stretch appears at T3M, T6M and T12M but not at T1M. Everything held back and why: the data-quality checklist.

Fleet

Projection When does the projection run, and how far?
i
Inflow of new vehicles How many new cars are sold each year, and what mix?
i
i
i
Robotaxi / shared-mobility decay i off — floor = 1
i
i
i
Hazard & attrition How many vehicles leave the fleet each year as they age
i
Weibull settings i active
i
Annual hazard / attrition by category i
i
i
i
i
i
i
i
Linear age curve settings i off
i
i
Same countries, same projection settings — counted as cars, or as the energy they need.

Observed fleet stock (on the road) by drivetrain. Projections use modeled inflow & attrition (see controls above).
When multiple countries are selected they are stacked by category. If a country lacks a PHEV/HEV split, both appear under HYBRID; if PETROL/DIESEL detail is missing they appear under OTHERS.

Fleet-Debug (Loading-Status): → waiting for Tab-Activation ...

World Map

Same country data as the Thresholds and Durations tabs, painted on a world map. Only the default (whole-market, passenger-car) variant is shown.

Metric i
i

View Zoom

Color scale is clipped at the 5th and 95th percentile so regular countries get a useful gradient. Cyan = pioneers that have already reached the threshold. Purple = countries whose fitted model does not project a transition within a reasonable horizon. Exact values always live in the hover tooltip.

Leaders

    Laggards

      Pioneers

        No transition

          Leaders / Laggards are the top and bottom five normal countries for the selected metric. Pioneers have already reached the threshold at the time of the last data point. No transition countries have a fitted Weibull that does not reach the threshold within a reasonable horizon — usually because v2 is very small (flat curve) or the model is still in its early phase.