Air Quality
Air quality metrics for major world cities: particulate matter, nitrogen dioxide, ozone, and AQI.
import polars as pl
import polarise
from polarise.datasets import get_air_quality_data
df = get_air_quality_data()
AQI gradient
{ cmap="CET_D12" · built-in or colorcet }
(df.style()
.gradient("AQI", cmap="CET_D12")
.fashion_minimal()
.title("Air Quality Index by City")
.show()
)
Air Quality Index by City
| City | PM2_5 | NO2 | O3 | AQI | Change_vs_2015 |
|---|---|---|---|---|---|
| Paris | 13.2 | 38.4 | 52.6 | 48 | -5.2 |
| Berlin | 11.8 | 26.1 | 48.2 | 42 | -3.8 |
| Madrid | 9.5 | 31.7 | 61.3 | 53 | 1.2 |
| Rome | 15.7 | 42.3 | 55.1 | 58 | -2.1 |
| London | 12.1 | 35.8 | 44.8 | 45 | -4.5 |
WHO limit exceedances
(df.style()
.highlight_above("PM2_5", value=25.0, fill="#FF6347")
.highlight_above("NO2", value=40.0, fill="orange")
.fashion_grid()
.title("Pollutants Exceeding WHO Limits")
.footnote("WHO limit: PM2.5 < 25 μg/m³, NO2 < 40 μg/m³")
.show()
)
Pollutants Exceeding WHO Limits
| City | PM2_5 | NO2 | O3 | AQI | Change_vs_2015 |
|---|---|---|---|---|---|
| Paris | 13.2 | 38.4 | 52.6 | 48 | -5.2 |
| Berlin | 11.8 | 26.1 | 48.2 | 42 | -3.8 |
| Madrid | 9.5 | 31.7 | 61.3 | 53 | 1.2 |
| Rome | 15.7 | 42.3 | 55.1 | 58 | -2.1 |
| London | 12.1 | 35.8 | 44.8 | 45 | -4.5 |
WHO limit: PM2.5 < 25 μg/m³, NO2 < 40 μg/m³
Change since 2015
{ cmap="managua_r" · built-in or cmcrameri }
(df.style()
.gradient_divergent("Change_vs_2015", center=5.0, cmap="managua_r")
.bar("AQI", fill="lightgreen")
.fashion_zebra()
.title("Air Quality Change Since 2015")
.show()
)
Air Quality Change Since 2015
| City | PM2_5 | NO2 | O3 | AQI | Change_vs_2015 |
|---|---|---|---|---|---|
| Paris | 13.2 | 38.4 | 52.6 | 48 | -5.2 |
| Berlin | 11.8 | 26.1 | 48.2 | 42 | -3.8 |
| Madrid | 9.5 | 31.7 | 61.3 | 53 | 1.2 |
| Rome | 15.7 | 42.3 | 55.1 | 58 | -2.1 |
| London | 12.1 | 35.8 | 44.8 | 45 | -4.5 |