How to Map the World's Volcanoes by Type and Tectonic Setting

On this page

Problem statement

Most of the world's volcanoes stand where one tectonic plate sinks beneath another; others sit on rifts where plates pull apart, or far from any boundary over a hot spot. Their shapes follow: steep stratovolcanoes above subduction zones, broad shields and fissures on rifts and hot spots. The Smithsonian's volcano table records both the primary volcano type and the tectonic setting, so the pattern can be mapped and counted. Two things need cleaning first: the type column spells the same type in singular and plural, and the setting column packs the plate setting and the crust thickness into one string. This page cleans both and maps the 1,214 Holocene volcanoes.

Quick answer

Fold the plural spellings into one type, split the setting at the slash, and count:

vol["kind"] = vol.Primary_Volcano_Type.str.replace(r"\((?:s|es)\)$", "", regex=True).str.strip()
vol[["setting", "crust"]] = vol.Tectonic_Setting.str.split(" / ", n=1, expand=True)
print(vol.kind.value_counts().head(8).to_string())
print(vol.setting.value_counts(dropna=False).to_string())
kind
Stratovolcano       658
Volcanic field      138
Shield              110
Caldera              85
Complex              55
Fissure vent         52
Pyroclastic cone     39
Lava dome            31
setting
Subduction zone    838
Rift zone          221
Intraplate         149
NaN                  6

Once the plural spellings are folded together, 658 of the 1,214 volcanoes are stratovolcanoes, the steep cones built of alternating lava and ash, followed by 138 volcanic fields, 110 shields and 85 calderas. By setting, 838 are on subduction zones, 221 on rifts and 149 within plates. Six have no setting recorded.

Horizontal bars of volcano types: 658 stratovolcanoes, then volcanic fields 138, shields 110, calderas 85, complexes 55 and fissure vents 52. Horizontal bars of volcano types: 658 stratovolcanoes, then volcanic fields 138, shields 110, calderas 85, complexes 55 and fissure vents 52.
Primary volcano types, plural spellings folded.

Cleaning the two columns

1. Types spelled twice

print(vol.Primary_Volcano_Type.value_counts().loc[lambda s: s.index.str.startswith(("Stratovolcano", "Shield", "Fissure", "Lava dome", "Pyroclastic cone"))].to_string())
print(f"type values before: {vol.Primary_Volcano_Type.nunique()}; after: {vol.kind.nunique()}")
Primary_Volcano_Type
Stratovolcano          551
Stratovolcano(es)      107
Shield                  97
Fissure vent(s)         33
Pyroclastic cone(s)     28
Lava dome(s)            25
Fissure vent            19
Shield(s)               13
Pyroclastic cone        11
Lava dome                6
Shield(pyroclastic)      3
Stratovolcano?           2
type values before: 27; after: 18

The raw column spells many types twice, once for a single cone and once with "(s)" or "(es)" for several: 551 "Stratovolcano" and 107 "Stratovolcano(es)". Removing the suffix takes the column from 27 values to 18. "Shield(pyroclastic)" and "Stratovolcano?" are kept apart, because they say something different: a shield built of pyroclastic material, and a type the program is not sure of.

2. Setting and crust

print(pd.crosstab(vol.crust.str.replace(r" \(.*\)$", "", regex=True), vol.setting).to_string())
setting                    Intraplate  Rift zone  Subduction zone
crust                                                            
Continental crust                 114         79              581
Crustal thickness unknown           0          0               70
Intermediate crust                  5         40               65
Oceanic crust                      30        102              122

The second half of the setting string is the thickness of the crust beneath the volcano: continental (over 25 km), intermediate (15 to 25 km) or oceanic (under 15 km). Subduction-zone volcanoes stand mostly on continental crust, 581 of 838, the Andes, Japan, Indonesia and the Cascades. Rift volcanoes stand mostly on oceanic crust, 102 of 221, like Iceland and the Azores on the Mid-Atlantic Ridge.

3. Type by setting

t = pd.crosstab(vol.kind, vol.setting)
print(t.loc[["Stratovolcano", "Shield", "Volcanic field", "Caldera", "Fissure vent"]].to_string())
setting         Intraplate  Rift zone  Subduction zone
kind                                                  
Stratovolcano           33         62              562
Shield                  27         52               29
Volcanic field          61         32               45
Caldera                  2          8               75
Fissure vent             7         41                4

Type follows setting. 562 of the 658 stratovolcanoes are on subduction zones, where the magma is viscous and gas-rich, and 75 of the 85 calderas, the craters left when a large explosive eruption empties the magma chamber. Fissure vents, where runny basalt pours out of long cracks, are almost all on rifts: 41 of 52.

Stacked bars of five volcano types by tectonic setting: stratovolcanoes and calderas mostly subduction zone, fissure vents mostly rift zone, shields and volcanic fields mixed. Stacked bars of five volcano types by tectonic setting: stratovolcanoes and calderas mostly subduction zone, fissure vents mostly rift zone, shields and volcanic fields mixed.
Volcano type by tectonic setting.

Below the sea and on the map

The data used on this page

The Smithsonian Institution Global Volcanism Program's Volcanoes of the World database (version 5.3 is cited as doi:10.5479/si.GVP.VOTW5-2025.5.3): its Holocene volcano and eruption tables, read from the program's WFS service on 19 October 2026 and saved on this site, because the database is edited as eruptions are reported.

from pathlib import Path
import zipfile

import geopandas as gpd
import numpy as np
import pandas as pd
import requests

Path("data").mkdir(exist_ok=True)
# Smithsonian Global Volcanism Program, Volcanoes of the World: Holocene volcanoes, Holocene eruptions and Pleistocene
# volcanoes as GeoJSON from its WFS service, with Natural Earth's populated places and 1:110m countries.
# Saved 19 October 2026, because the database is edited as eruptions are reported.
# Live: https://webservices.volcano.si.edu/geoserver/GVP-VOTW/ows?service=WFS&version=2.0.0&request=GetFeature
#       &outputFormat=json&typeName=GVP-VOTW:Smithsonian_VOTW_Holocene_Volcanoes (and ..._Holocene_Eruptions)
ARCHIVE = "gvp-votw-2026-10-19.zip"
if not Path(f"data/{ARCHIVE}").exists():
    Path(f"data/{ARCHIVE}").write_bytes(requests.get(f"https://data.spatialworkflow.io/{ARCHIVE}", timeout=600).content)
Z = zipfile.ZipFile(f"data/{ARCHIVE}")
vol = gpd.read_file(Z.open("Smithsonian_VOTW_Holocene_Volcanoes.json"))
eru = gpd.read_file(Z.open("Smithsonian_VOTW_Holocene_Eruptions.json"))
print(f"Volcanoes of the World: {len(vol):,} Holocene volcanoes, {len(eru):,} eruptions")
Volcanoes of the World: 1,214 Holocene volcanoes, 11,089 eruptions

Example 1: submarine volcanoes

sub = vol[vol.Elevation < 0]
print(f"summits below sea level: {len(sub)}; deepest {sub.Elevation.min():,.0f} m ({sub.loc[sub.Elevation.idxmin(), 'Volcano_Name']}); highest summit {vol.Elevation.max():,.0f} m ({vol.loc[vol.Elevation.idxmax(), 'Volcano_Name']})")
print(sub.setting.value_counts().to_string())
summits below sea level: 112; deepest -5,700 m (Udintsev Transform); highest summit 6,879 m (Ojos del Salado, Nevados)
setting
Subduction zone    63
Rift zone          30
Intraplate         15

112 volcanoes have their summit below sea level, the deepest at 5,700 m, Udintsev Transform in the far South Pacific, while the highest summit is Ojos del Salado on the Chile-Argentina border at 6,879 m. More of the submarine volcanoes are on subduction zones, 63, than on the mid-ocean rifts, 30: 50 of those 63 are in the northwestern Pacific and Tonga-Kermadec arcs, which have many seamounts.

Example 2: the map

Path("data/ne_110m_admin_0_countries.zip").write_bytes(Z.read("ne_110m_admin_0_countries.zip"))
world = gpd.read_file("data/ne_110m_admin_0_countries.zip")
ax = world.to_crs("+proj=robin").plot(color="#e5e7eb", figsize=(12, 6))
vol.to_crs("+proj=robin").plot(ax=ax, column="setting", markersize=4, legend=True)
ax.set_axis_off()
print(f"countries drawn: {len(world)}")
countries drawn: 177

Drawn in the Robinson projection, the subduction volcanoes outline the Pacific, the rift volcanoes run through Iceland, East Africa and the mid-ocean ridges, and the intraplate volcanoes stand alone in places like Hawaii, the Canaries and the volcanic fields of Arabia.

World map of volcanoes coloured by setting: subduction volcanoes in red ringing the Pacific and through Indonesia, rift volcanoes in teal in Iceland, East Africa and the ocean ridges, intraplate volcanoes in dark blue scattered elsewhere. World map of volcanoes coloured by setting: subduction volcanoes in red ringing the Pacific and through Indonesia, rift volcanoes in teal in Iceland, East Africa and the ocean ridges, intraplate volcanoes in dark blue scattered elsewhere.
Holocene volcanoes by tectonic setting.