0
点赞
收藏
分享

微信扫一扫

分享一个使用Echarts实现的中国地图展示省份数据的实例

ECharts 中国地图省份数据展示

中国各省份数据可视化

展示各省份模拟数据分布情况

<div class="bg-white-white rounded-lg shadow-lg overflow-hidden">
        <!-- 地图容器 -->
        <div id="chinaMap" class="w-full h-[600px]"></div>
        
        <!-- 控制面板 -->
        <div class="p-4 bg-gray-50 border-t border-gray-200 flex flex-wrap gap-4 justify-center">
            <button id="resetBtn" class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-md transition duration-200">
                重置视图
            </button>
            <button id="highlightBtn" class="bg-green-500 hover:bg-green-600 text-white px-4 py-2 rounded-md transition duration-200">
                高亮高值区域
            </button>
            <div class="text-gray-600 self-center">
                数据类型: <select id="dataType" class="border border-gray-300 rounded-md px-2 py-1 ml-2">
                    <option value="population">人口数据</option>
                    <option value="gdp">GDP数据</option>
                    <option value="area">面积数据</option>
                </select>
            </div>
        </div>
    </div>
    
    <div class="mt-6 bg-white rounded-lg shadow-md p-6">
        <h2 class="text-xl font-semibold text-gray-700 mb-3">图表说明</h2>
        <ul class="text-gray-600 space-y-2">
            <li>• 地图颜色越深表示对应省份的数据值越高</li>
            <li>• 鼠标悬停在省份上可查看详细数据</li>
            <li>• 点击省份可查看该省份的详细信息弹窗</li>
            <li>• 可通过控制面板切换不同类型的数据展示</li>
        </ul>
    </div>
</div>

<script>
    // 初始化地图实例
    const mapDom = document.getElementById('chinaMap');
    const myChart = echarts.init(mapDom);
    
    // 生成模拟数据
    function generateProvinceData(type) {
        // 中国省份列表
        const provinces = [
            '北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江',
            '上海', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南',
            '湖北', '湖南', '广东', '广西', '海南', '重庆', '四川', '贵州',
            '云南', '西藏', '陕西', '甘肃', '青海', '宁夏', '新疆', '台湾',
            '香港', '澳门'
        ];
        
        // 根据数据类型生成不同范围的随机数据
        return provinces.map(province => {
            let value;
            switch(type) {
                case 'population':
                    // 人口数据 (单位: 百万人)
                    value = Math.random() * 100 + 1;
                    break;
                case 'gdp':
                    // GDP数据 (单位: 千亿元)
                    value = Math.random() * 12 + 0.1;
                    break;
                case 'area':
                    // 面积数据 (单位: 万平方公里)
                    value = Math.random() * 160 + 0.5;
                    break;
                default:
                    value = Math.random() * 100;
            }
            return {
                name: province,
                value: parseFloat(value.toFixed(2))
            };
        });
    }
    
    // 更新地图数据和配置
    function updateMapData(dataType) {
        const data = generateProvinceData(dataType);
        
        // 获取数据类型的文本描述和单位
        let dataLabel, unit;
        switch(dataType) {
            case 'population':
                dataLabel = '人口数据';
                unit = '百万人';
                break;
            case 'gdp':
                dataLabel = 'GDP数据';
                unit = '千亿元';
                break;
            case 'area':
                dataLabel = '面积数据';
                unit = '万平方公里';
                break;
        }
        
        // 配置地图选项
        const option = {
            title: {
                text: `中国各省份${dataLabel}分布`,
                left: 'center',
                textStyle: {
                    fontSize: 18
                }
            },
            tooltip: {
                trigger: 'item',
                formatter: function(params) {
                    return `${params.name}: ${params.value} ${unit}`;
                }
            },
            legend: {
                orient: 'horizontal',
                bottom: 10,
                left: 'center',
                data: [dataLabel]
            },
            visualMap: {
                type: 'continuous',
                min: Math.min(...data.map(item => item.value)),
                max: Math.max(...data.map(item => item.value)),
                left: 20,
                top: 'center',
                itemWidth: 10,
                itemHeight: 120,
                calculable: true,
                label: {
                    show: true,
                    formatter: function(value) {
                        return value.toFixed(1);
                    }
                },
                color: ['#88398a', '#722ed1', '#4892fa', '#0fc6c2', '#1afa29']
            },
            series: [
                {
                    name: dataLabel,
                    type: 'map',
                    mapType: 'china',
                    roam: true,  // 允许缩放和平移
                    label: {
                        show: true,  // 显示省份名称
                        fontSize: 10
                    },
                    emphasis: {  // 鼠标悬停效果
                        label: {
                            show: true,
                            fontSize: 12,
                            fontWeight: 'bold'
                        },
                        itemStyle: {
                            shadowBlur: 10,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    },
                    data: data,
                    // 区域样式
                    itemStyle: {
                        borderColor: '#fff',
                        borderWidth: 1
                    }
                }
            ]
        };
        
        // 设置配置项,渲染地图
        myChart.setOption(option);
    }
    
    // 初始加载人口数据
    updateMapData('population');
    
    // 事件监听 - 数据类型切换
    document.getElementById('dataType').addEventListener('change', function() {
        updateMapData(this.value);
    });
    
    // 事件监听 - 重置视图
    document.getElementById('resetBtn').addEventListener('click', function() {
        myChart.dispatchAction({
            type: 'restore'
        });
    });
    
    // 事件监听 - 高亮高值区域
    document.getElementById('highlightBtn').addEventListener('click', function() {
        const dataType = document.getElementById('dataType').value;
        const data = generateProvinceData(dataType);
        
        // 找出值最高的5个省份
        const topProvinces = [...data]
            .sort((a, b) => b.value - a.value)
            .slice(0, 5)
            .map(item => item.name);
        
        // 高亮显示
        myChart.dispatchAction({
            type: 'highlight',
            name: topProvinces
        });
        
        // 3秒后取消高亮
        setTimeout(() => {
            myChart.dispatchAction({
                type: 'downplay',
                name: topProvinces
            });
        }, 3000);
    });
    
    // 点击省份显示详情
    myChart.on('click', function(params) {
        if (params.componentType === 'series' && params.seriesType === 'map') {
            alert(`${params.name}的详细数据:\n${params.value} ${
                document.getElementById('dataType').value === 'population' ? '百万人' : 
                document.getElementById('dataType').value === 'gdp' ? '千亿元' : '万平方公里'
            }`);
        }
    });
    
    // 响应窗口大小变化
    window.addEventListener('resize', function() {
        myChart.resize();
    });
</script>


举报

相关推荐

0 条评论