python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Pyecharts绘制交互式地图

Python使用Pyecharts绘制交互式中国地图的流程解析

作者:站大爷IP

Pyecharts作为基于ECharts的Python可视化库,提供三大核心优势,即零代码交互,多级地图支持和高度定制化,下面我们就来看看如何使用Pyecharts绘制交互式中国地图吧

一、为什么选择Pyecharts绘制地图

当需要展示各省份经济指标、人口分布或疫情数据时,表格和柱状图往往难以直观呈现地理空间关系。Pyecharts作为基于ECharts的Python可视化库,提供三大核心优势:

以2025年某电商平台销售数据为例,通过热力地图可快速发现:广东省销售额占比达28%,而西北五省总和不足10%。这种空间分布特征在传统图表中难以直观呈现。

二、环境准备:安装与配置

2.1 基础安装

pip install pyecharts

2.2 地图数据包安装(关键步骤)

Pyecharts采用模块化地图设计,需单独安装对应数据包:

# 中国省级地图(必须安装)
pip install echarts-china-provinces-pypkg

# 可选扩展包
pip install echarts-china-cities-pypkg  # 市级地图
pip install echarts-china-counties-pypkg  # 县级地图

常见问题:若未安装省级地图包,渲染时会报错Map type "china" not exists

三、数据准备:从原始数据到可视化格式

3.1 数据结构要求

Pyecharts地图需要特定格式的二维列表:

[("北京", 100), ("上海", 200), ("广东", 300), ...]

3.2 实际案例处理

假设有如下CSV数据(部分展示):

省份,销售额(亿元)
北京,125
上海,210
广东,380
江苏,295
...

转换代码:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('sales_data.csv')

# 转换为元组列表
data = list(zip(df['省份'], df['销售额(亿元)']))

3.3 数据验证技巧

# 检查省份名称是否规范(避免"广东"与"广东省"混用)
valid_provinces = {"北京", "上海", "广东", "江苏", ...}  # 完整列表见附录
for item in data:
    if item[0] not in valid_provinces:
        print(f"发现无效省份名: {item[0]}")

四、基础地图绘制:三步完成可视化

4.1 最小可行代码

from pyecharts.charts import Map
from pyecharts import options as opts

# 示例数据
data = [("北京", 100), ("上海", 200), ("广东", 300)]

# 创建地图
map_chart = (
    Map()
    .add("销售额", data, "china")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="2025年各省份销售额"),
        visualmap_opts=opts.VisualMapOpts(max_=300)
    )
)

# 生成HTML文件
map_chart.render("china_map.html")

4.2 代码解析

Map() :创建地图对象

.add() :添加数据系列

.set_global_opts() :全局配置

标题、视觉映射等设置

.render() :输出HTML文件

4.3 效果增强技巧

调整地图中心点与缩放

.add(..., center=[105, 36], zoom=1.2)  # 中心点设为地理中心,适当放大

优化标签显示

.set_series_opts(
    label_opts=opts.LabelOpts(
        is_show=True,  # 显示标签
        color="#333",  # 标签颜色
        font_size=10   # 字体大小
    )
)

五、进阶美化:打造专业级地图

5.1 分段颜色映射

.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,  # 启用分段
        pieces=[
            {"min": 0, "max": 100, "label": "0-100亿", "color": "#FFE4E1"},
            {"min": 101, "max": 200, "label": "101-200亿", "color": "#FF7F50"},
            {"min": 201, "max": 300, "label": "201-300亿", "color": "#FF4500"},
            {"min": 301, "label": "300亿以上", "color": "#8B0000"}
        ]
    )
)

5.2 自定义地图样式

.set_series_opts(
    itemstyle_opts=opts.ItemStyleOpts(
        area_color="#142957",  # 省份底色
        border_color="#00f2fe",  # 边界颜色
        border_width=0.5  # 边界宽度
    )
)

5.3 添加悬停高亮效果

.set_series_opts(
    emphasis_opts=opts.ItemStyleOpts(
        area_color="#00f2fe",  # 悬停时颜色
        border_color="#ffffff",  # 悬停时边界
        border_width=2  # 悬停时边界加粗
    )
)

六、完整案例:2025年各省份GDP热力图

6.1 数据准备

gdp_data = [
    ("广东", 124369.67), ("江苏", 116364.2), 
    ("山东", 83095.90), ("浙江", 73516.3),
    ("河南", 58887.41), ("四川", 53850.79),
    ("湖北", 50012.94), ("福建", 48829.61),
    ("湖南", 46027.47), ("上海", 43214.85)
]

6.2 完整代码

from pyecharts.charts import Map
from pyecharts import options as opts

# 创建地图
map_chart = (
    Map()
    .add(
        series_name="GDP(亿元)",
        data_pair=gdp_data,
        maptype="china",
        center=[105, 36],
        zoom=1.2
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="2025年中国各省份GDP分布",
            subtitle="数据来源:国家统计局",
            pos_left="center"
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_piecewise=True,
            max_=125000,
            pieces=[
                {"min": 0, "max": 50000, "label": "<5万亿", "color": "#FFE4E1"},
                {"min": 50001, "max": 80000, "label": "5-8万亿", "color": "#FFDAB9"},
                {"min": 80001, "max": 100000, "label": "8-10万亿", "color": "#FFA07A"},
                {"min": 100001, "label": ">10万亿", "color": "#FF6347"}
            ],
            pos_left="10%",
            pos_top="20%"
        ),
        tooltip_opts=opts.TooltipOpts(
            trigger="item",
            formatter="{b}<br/>{c}亿元"
        )
    )
    .set_series_opts(
        label_opts=opts.LabelOpts(
            is_show=True,
            color="#333",
            font_size=10
        ),
        itemstyle_opts=opts.ItemStyleOpts(
            area_color="#E6E6FA",
            border_color="#4682B4"
        ),
        emphasis_opts=opts.ItemStyleOpts(
            area_color="#9370DB",
            border_color="#FFFFFF",
            border_width=1.5
        )
    )
)

# 生成HTML
map_chart.render("2025_china_gdp_map.html")

6.3 效果说明

分段显示:GDP分为4个区间,不同颜色对应不同量级

交互功能

视觉优化

七、常见问题解决方案

7.1 地图显示空白

原因:未安装对应地图数据包

解决:根据报错提示安装缺失的包,如:

pip install echarts-china-provinces-pypkg

7.2 省份名称不匹配

表现:部分省份显示为灰色(无数据)

检查

valid_provinces = {
    "北京", "天津", "河北", "山西", "内蒙古", "辽宁", 
    "吉林", "黑龙江", "上海", "江苏", "浙江", "安徽", 
    "福建", "江西", "山东", "河南", "湖北", "湖南", 
    "广东", "广西", "海南", "重庆", "四川", "贵州", 
    "云南", "西藏", "陕西", "甘肃", "青海", "宁夏", 
    "新疆"
}

7.3 数值范围显示异常

现象:颜色映射不准确

解决:在VisualMapOpts中明确设置max_值:

.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(
        max_=50000,  # 手动设置最大值
        is_piecewise=True
    )
)

八、扩展应用场景

8.1 结合Flask/Django嵌入网页

# Flask示例
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def show_map():
    # 生成地图(实际项目中可缓存结果)
    map_chart.render("templates/map.html")
    return render_template("map.html")

if __name__ == '__main__':
    app.run()

8.2 动态数据更新

通过JavaScript定时刷新数据(需配合ECharts的setOption方法):

// 伪代码示例
setInterval(function() {
    fetch('/api/get_new_data')
        .then(res => res.json())
        .then(data => {
            myChart.setOption({
                series: [{
                    data: data
                }]
            });
        });
}, 5000);

8.3 3D地图效果

需安装额外扩展包:

pip install pyecharts-gallery

3D地图示例:

from pyecharts.charts import Map3D
from pyecharts import options as opts

map3d = (
    Map3D()
    .add_schema(
        maptype="china",
        itemstyle_opts=opts.ItemStyleOpts(
            color="#1E90FF",
            opacity=1,
            border_width=0.8
        )
    )
    .add(
        series_name="",
        data_pair=data,
        type_="bar3D",
        shading="lambert",
        label_opts=opts.LabelOpts(
            is_show=False
        )
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(max_=300)
    )
)
map3d.render("3d_map.html")

九、总结与建议

通过本文介绍的流程,即使没有前端开发经验,也能快速创建出专业级的交互式地图。实际项目中可根据需求组合使用基础地图、分段颜色、3D效果等特性,打造更具说服力的数据可视化作品。

到此这篇关于Python使用Pyecharts绘制交互式中国地图的流程解析的文章就介绍到这了,更多相关Python Pyecharts绘制交互式地图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文