> For the complete documentation index, see [llms.txt](https://docs.mapbox.com/mapbox-gl-js/ja/llms.txt)

# Update a choropleth layer by zoom level

This map uses 2014 U.S. Census data to create two layers. One layer contains a choropleth visualization for *state populations*, and one layer contains a choropleth visualization for *county populations*.

The example defines a zoom level at which each layer and its respective legend should appear or disappear using the [`minzoom`](https://docs.mapbox.com/style-spec/reference/layers/#minzoom) and [`maxzoom`](https://docs.mapbox.com/style-spec/reference/layers/#maxzoom) layer properties.

You can use [`getZoom`](https://docs.mapbox.com/mapbox-gl-js/ja/api/map/#map#getzoom) to use zoom values to control the appearance of other elements.

> **Note: Use a custom tileset**
> 
> This example uses 2014 U.S. Census data that was uploaded to Mapbox as a vector tileset. This data is not updated or maintained and **should not be used in production applications.**If you're interested in creating an application that uses U.S. Census data, you can download a Shapefile from [census.gov's data portal](https://www.census.gov/geographies/mapping-files/time-series/geo/cartographic-boundary.html) and upload it to Mapbox Studio's [Tilesets page](https://console.mapbox.com/studio/tilesets/).

> Example code:

**JavaScript**

```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Update a choropleth layer by zoom level</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<link href="https://api.mapbox.com/mapbox-gl-js/v3.29.0/mapbox-gl.css" rel="stylesheet">
<script src="https://api.mapbox.com/mapbox-gl-js/v3.29.0/mapbox-gl.js"></script>
<style>
body { margin: 0; padding: 0; }
#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<style>
    .legend {
        background-color: #fff;
        border-radius: 3px;
        bottom: 30px;
        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
        font:
            12px/20px 'Helvetica Neue',
            Arial,
            Helvetica,
            sans-serif;
        padding: 10px;
        position: absolute;
        right: 10px;
        z-index: 1;
    }

    .legend h4 {
        margin: 0 0 10px;
    }

    .legend div span {
        border-radius: 50%;
        display: inline-block;
        height: 10px;
        margin-right: 5px;
        width: 10px;
    }
</style>

<div id="map"></div>

<div id="state-legend" class="legend">
    <h4>Population</h4>
    <div><span style="background-color: #723122"></span>25,000,000</div>
    <div><span style="background-color: #8b4225"></span>10,000,000</div>
    <div><span style="background-color: #a25626"></span>7,500,000</div>
    <div><span style="background-color: #b86b25"></span>5,000,000</div>
    <div><span style="background-color: #ca8323"></span>2,500,000</div>
    <div><span style="background-color: #da9c20"></span>1,000,000</div>
    <div><span style="background-color: #e6b71e"></span>750,000</div>
    <div><span style="background-color: #eed322"></span>500,000</div>
    <div><span style="background-color: #f2f12d"></span>0</div>
</div>

<div id="county-legend" class="legend" style="display: none">
    <h4>Population</h4>
    <div><span style="background-color: #723122"></span>1,000,000</div>
    <div><span style="background-color: #8b4225"></span>500,000</div>
    <div><span style="background-color: #a25626"></span>100,000</div>
    <div><span style="background-color: #b86b25"></span>50,000</div>
    <div><span style="background-color: #ca8323"></span>10,000</div>
    <div><span style="background-color: #da9c20"></span>5,000</div>
    <div><span style="background-color: #e6b71e"></span>1,000</div>
    <div><span style="background-color: #eed322"></span>100</div>
    <div><span style="background-color: #f2f12d"></span>0</div>
</div>

<script>
    const map = new mapboxgl.Map({
        // TO MAKE THE MAP APPEAR YOU MUST
        // ADD YOUR ACCESS TOKEN FROM
        // https://account.mapbox.com
        accessToken: 'YOUR_MAPBOX_ACCESS_TOKEN',
        container: 'map',
        // Choose from Mapbox's core styles, or make your own style with Mapbox Studio
        style: 'mapbox://styles/mapbox/standard',
        config: {
            basemap: {
                theme: 'monochrome'
            }
        },
        center: [-98, 38.88],
        minZoom: 2,
        zoom: 3
    });

    const zoomThreshold = 4;

    map.on('load', () => {
        // Add a custom vector tileset source. The tileset used in
        // this example contains a feature for every state and
        // county in the U.S.
        // Each state contains four properties. For example:
        //     {
        //         isState: true,
        //         name: "Wyoming",
        //         population: 584153,
        //         state: 56
        //     }
        // Each county contains four properties. For example:
        //     {
        //         county: 16049,
        //         isCounty: true,
        //         name: "Idaho County",
        //         population: 16315
        //     }
        map.addSource('population', {
            'type': 'vector',
            'url': 'mapbox://mapbox.660ui7x6'
        });

        map.addLayer({
            'id': 'state-population',
            'source': 'population',
            'source-layer': 'state_county_population_2014_cen',
            'maxzoom': zoomThreshold,
            'type': 'fill',
            // only include features for which the "isState"
            // property is "true"
            'filter': ['==', 'isState', true],
            'paint': {
                'fill-color': [
                    'interpolate',
                    ['linear'],
                    ['get', 'population'],
                    0,
                    '#F2F12D',
                    500000,
                    '#EED322',
                    750000,
                    '#E6B71E',
                    1000000,
                    '#DA9C20',
                    2500000,
                    '#CA8323',
                    5000000,
                    '#B86B25',
                    7500000,
                    '#A25626',
                    10000000,
                    '#8B4225',
                    25000000,
                    '#723122'
                ],
                'fill-opacity': 0.75
            },
            slot: 'bottom' // bottom slot in Mapbox Standard style
        });

        map.addLayer({
            'id': 'county-population',
            'source': 'population',
            'source-layer': 'state_county_population_2014_cen',
            'minzoom': zoomThreshold,
            'type': 'fill',
            // only include features for which the "isCounty"
            // property is "true"
            'filter': ['==', 'isCounty', true],
            'paint': {
                'fill-color': [
                    'interpolate',
                    ['linear'],
                    ['get', 'population'],
                    0,
                    '#F2F12D',
                    100,
                    '#EED322',
                    1000,
                    '#E6B71E',
                    5000,
                    '#DA9C20',
                    10000,
                    '#CA8323',
                    50000,
                    '#B86B25',
                    100000,
                    '#A25626',
                    500000,
                    '#8B4225',
                    1000000,
                    '#723122'
                ],
                'fill-opacity': 0.75
            },
            slot: 'middle' // middle slot in Mapbox Standard style
        });
    });

    const stateLegendEl = document.getElementById('state-legend');
    const countyLegendEl = document.getElementById('county-legend');
    map.on('zoom', () => {
        if (map.getZoom() > zoomThreshold) {
            stateLegendEl.style.display = 'none';
            countyLegendEl.style.display = 'block';
        } else {
            stateLegendEl.style.display = 'block';
            countyLegendEl.style.display = 'none';
        }
    });
</script>

</body>
</html>
```

**React**

```jsx
import React, { useEffect, useRef } from 'react';
import * as mapboxgl from 'mapbox-gl/esm';

import 'mapbox-gl/dist/mapbox-gl.css';

const legendStyle = {
  backgroundColor: '#fff',
  borderRadius: '3px',
  bottom: '30px',
  boxShadow: '0 1px 2px rgba(0, 0, 0, 0.1)',
  font: "12px/20px 'Helvetica Neue', Arial, Helvetica, sans-serif",
  padding: '10px',
  position: 'absolute',
  right: '10px',
  zIndex: 1
};

const legendHeadingStyle = {
  margin: '0 0 10px'
};

const legendSpanStyle = {
  borderRadius: '50%',
  display: 'inline-block',
  height: '10px',
  marginRight: '5px',
  width: '10px'
};

const MapboxExample = () => {
  const mapContainerRef = useRef();
  const mapRef = useRef();

  useEffect(() => {
    mapRef.current = new mapboxgl.Map({
      // TO MAKE THE MAP APPEAR YOU MUST
      // ADD YOUR ACCESS TOKEN FROM
      // https://account.mapbox.com
      accessToken: 'YOUR_MAPBOX_ACCESS_TOKEN',
      container: mapContainerRef.current,
      style: 'mapbox://styles/mapbox/standard',
      config: {
        basemap: {
          theme: 'monochrome'
        }
      },
      center: [-98, 38.88],
      minZoom: 2,
      zoom: 3
    });

    const zoomThreshold = 4;

    mapRef.current.on('load', () => {
      mapRef.current.addSource('population', {
        type: 'vector',
        url: 'mapbox://mapbox.660ui7x6'
      });

      mapRef.current.addLayer({
        id: 'state-population',
        source: 'population',
        'source-layer': 'state_county_population_2014_cen',
        maxzoom: zoomThreshold,
        type: 'fill',
        filter: ['==', 'isState', true],
        paint: {
          'fill-color': [
            'interpolate',
            ['linear'],
            ['get', 'population'],
            0,
            '#F2F12D',
            500000,
            '#EED322',
            750000,
            '#E6B71E',
            1000000,
            '#DA9C20',
            2500000,
            '#CA8323',
            5000000,
            '#B86B25',
            7500000,
            '#A25626',
            10000000,
            '#8B4225',
            25000000,
            '#723122'
          ],
          'fill-opacity': 0.75
        },
        slot: 'bottom' // bottom slot in Mapbox Standard style
      });

      mapRef.current.addLayer({
        id: 'county-population',
        source: 'population',
        'source-layer': 'state_county_population_2014_cen',
        minzoom: zoomThreshold,
        type: 'fill',
        filter: ['==', 'isCounty', true],
        paint: {
          'fill-color': [
            'interpolate',
            ['linear'],
            ['get', 'population'],
            0,
            '#F2F12D',
            100,
            '#EED322',
            1000,
            '#E6B71E',
            5000,
            '#DA9C20',
            10000,
            '#CA8323',
            50000,
            '#B86B25',
            100000,
            '#A25626',
            500000,
            '#8B4225',
            1000000,
            '#723122'
          ],
          'fill-opacity': 0.75
        },
        slot: 'middle' // middle slot in Mapbox Standard style
      });
    });

    const stateLegendEl = document.getElementById('state-legend');
    const countyLegendEl = document.getElementById('county-legend');

    mapRef.current.on('zoom', () => {
      if (mapRef.current.getZoom() > zoomThreshold) {
        stateLegendEl.style.display = 'none';
        countyLegendEl.style.display = 'block';
      } else {
        stateLegendEl.style.display = 'block';
        countyLegendEl.style.display = 'none';
      }
    });
  }, []);

  return (
    <>
      <div id="map" ref={mapContainerRef} style={{ height: '100%' }}></div>

      <div id="state-legend" className="legend" style={legendStyle}>
        <h4 style={legendHeadingStyle}>Population</h4>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#723122' }}
          ></span>
          25,000,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#8b4225' }}
          ></span>
          10,000,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#a25626' }}
          ></span>
          7,500,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#b86b25' }}
          ></span>
          5,000,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#ca8323' }}
          ></span>
          2,500,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#da9c20' }}
          ></span>
          1,000,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#e6b71e' }}
          ></span>
          750,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#eed322' }}
          ></span>
          500,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#f2f12d' }}
          ></span>
          0
        </div>
      </div>

      <div
        id="county-legend"
        className="legend"
        style={{ ...legendStyle, display: 'none' }}
      >
        <h4 style={legendHeadingStyle}>Population</h4>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#723122' }}
          ></span>
          1,000,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#8b4225' }}
          ></span>
          500,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#a25626' }}
          ></span>
          100,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#b86b25' }}
          ></span>
          50,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#ca8323' }}
          ></span>
          10,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#da9c20' }}
          ></span>
          5,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#e6b71e' }}
          ></span>
          1,000
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#eed322' }}
          ></span>
          100
        </div>
        <div>
          <span
            style={{ ...legendSpanStyle, backgroundColor: '#f2f12d' }}
          ></span>
          0
        </div>
      </div>
    </>
  );
};

export default MapboxExample;
```