Faceted County-Level Choropleth Maps#

A set of maps arranged in a grid, each showing the distribution of a species’ projected habitat across US counties.

Each choropleth map uses color intensity to represent the percentage values within county boundaries.

import altair as alt
from altair.datasets import data

# Load species data with county_id as number
csv_data = alt.UrlData(data.species.url, format=alt.CsvDataFormat(parse={'county_id': 'number'}))

# Load US counties topology
counties = alt.topo_feature(data.us_10m.url, 'counties')

chart = alt.Chart(csv_data).mark_geoshape().encode(
    shape='geo:G',  # Geographic shape encoding for map rendering
    color=alt.Color('habitat_yearround_pct:Q')
    .scale(domain=[0, 1], scheme='viridis', zero=True, nice=False)
    .title(['Suitable Habitat', '% of County'])
    .legend(format='.0%'),
    tooltip=[
        alt.Tooltip('id:N').title('County ID'),
        alt.Tooltip('habitat_yearround_pct:Q').title('Habitat %').format('.2%')
    ],
    facet=alt.Facet('common_name:N', columns=2).title(None),
).transform_lookup(
    lookup='county_id',
    from_=alt.LookupData(data=counties, key='id'),
    as_='geo'  # Join county geometry data
).project(type='albers').properties(width=300, height=200)

# Display the chart
chart
import altair as alt
from altair.datasets import data

# Load species data with county_id as number
csv_data = alt.UrlData(data.species.url, format=alt.CsvDataFormat(parse={'county_id': 'number'}))

# Load US counties topology
counties = alt.topo_feature(data.us_10m.url, 'counties')

chart = alt.Chart(csv_data).mark_geoshape().encode(
    shape='geo:G',  # Geographic shape encoding for map rendering
    color=alt.Color(
        'habitat_yearround_pct:Q',
        scale=alt.Scale(domain=[0, 1], scheme='viridis', zero=True, nice=False),
        title=['Suitable Habitat', '% of County'],
        legend=alt.Legend(format='.0%')
    ),
    tooltip=[
        alt.Tooltip('id:N', title='County ID'),
        alt.Tooltip('habitat_yearround_pct:Q', title='Habitat %', format='.2%')
    ],
    facet=alt.Facet('common_name:N', columns=2, title=None),
).transform_lookup(
    lookup='county_id',
    from_=alt.LookupData(data=counties, key='id'),
    as_='geo'  # Join county geometry data
).project(type='albers').properties(width=300, height=200)

# Display the chart
chart