使用Highcharts显示地图

242 阅读3分钟

要实现都道府县区域默认颜色为灰色,同时特定值显示特定颜色(如值为1时为蓝色,值为2时为红色),可以继续使用 colorAxisdataClasses 来实现。这里是更新后的代码:

html
コードをコピーする
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Highcharts Map with Custom Region Colors</title>
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <script src="https://code.highcharts.com/maps/modules/map.js"></script>
    <script src="https://code.highcharts.com/mapdata/countries/jp/jp-all.js"></script>
    <style>
        body {
            font-family: "MS 明朝", serif; /* 设置全局字体为 MS 明朝 */
        }
        #container {
            width: 100%;
            overflow: hidden; /* 确保包含浮动元素 */
        }
        .legend-container {
            float: left; /* 左浮动 */
            width: 150px; /* 定义说明标签容器的宽度 */
            text-align: left;
            background-color: #f0f0f0;
            border: 1px solid #ccc;
            border-radius: 5px;
            padding: 10px;
            font-family: "MS 明朝", serif; /* 设置说明标签的字体为 MS 明朝 */
            font-size: 14px;
            margin-right: 10px; /* 与地图容器的间距 */
        }
        .legend-item {
            margin-bottom: 8px;
        }
        .legend-item span {
            display: inline-block;
            width: 12px;
            height: 12px;
            margin-right: 5px;
            vertical-align: middle;
        }
        .legend-item.blue span {
            background-color: #0000FF; /* 蓝色 */
        }
        .legend-item.red span {
            background-color: #FF0000; /* 红色 */
        }
        .legend-item.gray span {
            background-color: #CCCCCC; /* 灰色 */
        }
        #map-container {
            float: left; /* 左浮动 */
            width: calc(100% - 170px); /* 减去说明标签容器的宽度和间距 */
        }
    </style>
</head>
<body>

<div id="container">
    <div class="legend-container">
        <div class="legend-item blue"><span></span> 值为 1 - 蓝色</div>
        <div class="legend-item red"><span></span> 值为 2 - 红色</div>
        <div class="legend-item gray"><span></span> 其他 - 灰色</div>
    </div>
    <div id="map-container"></div>
</div>

<script>
    document.addEventListener('DOMContentLoaded', function () {
        Highcharts.mapChart('map-container', {
            chart: {
                map: 'countries/jp/jp-all',
                height: 600 // 设置地图的高度
            },
            title: {
                text: '' // 设置为空字符串,不显示标题
            },
            credits: {
                enabled: false // 禁用 Highcharts.com 版权信息显示
            },
            colorAxis: {
                dataClasses: [{
                    from: 1,
                    to: 1,
                    color: '#0000FF', // 值为 1 时,颜色为蓝色
                    name: '值为 1'
                }, {
                    from: 2,
                    to: 2,
                    color: '#FF0000', // 值为 2 时,颜色为红色
                    name: '值为 2'
                }, {
                    from: 0,
                    to: 0,
                    color: '#CCCCCC', // 其他值时,颜色为灰色
                    name: '其他'
                }]
            },
            plotOptions: {
                map: {
                    borderColor: '#FFFFFF', // 设置边界线颜色为白色
                    borderWidth: 1 // 设置边界线宽度
                }
            },
            series: [{
                data: [
                    { 'hc-key': 'jp-tk', value: 1 }, // 东京都,值为 1,蓝色
                    { 'hc-key': 'jp-kn', value: 2 }, // 神奈川县,值为 2,红色
                    // 其他都道府县值为 0,不设定特定颜色
                    { 'hc-key': 'jp-01', value: 0 },
                    { 'hc-key': 'jp-02', value: 0 },
                    { 'hc-key': 'jp-03', value: 0 },
                    { 'hc-key': 'jp-04', value: 0 },
                    { 'hc-key': 'jp-05', value: 0 },
                    { 'hc-key': 'jp-06', value: 0 },
                    { 'hc-key': 'jp-07', value: 0 },
                    { 'hc-key': 'jp-08', value: 0 },
                    { 'hc-key': 'jp-09', value: 0 },
                    { 'hc-key': 'jp-10', value: 0 },
                    { 'hc-key': 'jp-11', value: 0 },
                    { 'hc-key': 'jp-12', value: 0 },
                    // 添加更多都道府县数据...
                ],
                mapData: Highcharts.maps['countries/jp/jp-all'], // 使用日本地图数据
                joinBy: 'hc-key', // 使用 'hc-key' 字段连接数据和地图
                name: 'Data', // 系列名称
                dataLabels: {
                    enabled: false // 禁用数据标签显示都道府县名称
                }
            }]
        });
    });
</script>

</body>
</html>

代码解释:

  • colorAxis.dataClasses:

    • from: 1, to: 1, color: '#0000FF': 设置值为 1 时的颜色为蓝色。
    • from: 2, to: 2, color: '#FF0000': 设置值为 2 时的颜色为红色。
    • from: 0, to: 0, color: '#CCCCCC': 设置其他值时的颜色为灰色。
  • series.nullColor:

    • 删除 nullColor 设置,因为所有值都会通过 dataClasses 设置颜色。

通过这种方式,值为 1 的都道府县显示为蓝色,值为 2 的都道府县显示为红色,其他都道府县默认显示为灰色。