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

 更新时间:2026年02月03日 14:36:31   作者:站大爷IP  
Pyecharts作为基于ECharts的Python可视化库,提供三大核心优势,即零代码交互,多级地图支持和高度定制化,下面我们就来看看如何使用Pyecharts绘制交互式中国地图吧

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

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

  • 零代码交互:生成的HTML地图支持鼠标悬停查看数值、缩放平移等操作
  • 多级地图支持:从全国到县级行政区划均可渲染
  • 高度定制化:颜色渐变、边界样式、标签显示等20+项参数可调

以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() :添加数据系列

  • 参数1:系列名称(图例显示)
  • 参数2:数据列表
  • 参数3:地图类型("china"表示中国地图)

.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")

九、总结与建议

  • 快速上手:从基础代码开始,逐步添加配置项
  • 数据验证:确保省份名称规范,数值范围合理
  • 交互设计:合理设置缩放、标签显示等交互参数
  • 性能优化:大数据量时考虑使用is_map_symbol_show=False隐藏标记点
  • 持续学习:关注Pyecharts官方文档更新,掌握新特性

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

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

相关文章

  • PyTorch中常见损失函数的使用详解

    PyTorch中常见损失函数的使用详解

    损失函数,又叫目标函数,是指计算机标签值和预测值直接差异的函数,本文为大家整理了PyTorch中常见损失函数的简单解释和使用,希望对大家有所帮助
    2023-06-06
  • 在Python 中将类对象序列化为JSON

    在Python 中将类对象序列化为JSON

    这篇文章主要介绍了在Python 中将类对象序列化为JSON,序列化是将对象转换为可以在以后保存和检索介质中的过程,下文具体的内容分享,需要的朋友可以参考一下
    2022-04-04
  • python中的多cpu并行编程

    python中的多cpu并行编程

    这篇文章主要介绍了python中的多cpu并行编程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 使用python采集Excel表中某一格数据

    使用python采集Excel表中某一格数据

    这篇文章主要介绍了使用python采集Excel表中某一格数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Tkinter组件实现Radiobutton的示例

    Tkinter组件实现Radiobutton的示例

    Radiobutton组件用于实现多选一的问题,本文主要介绍了Tkinter组件实现Radiobutton的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python中pyautogui库的使用方法汇总

    Python中pyautogui库的使用方法汇总

    在使用Python做脚本的话,有两个库可以使用,一个为PyUserInput库,另一个为pyautogui库,本文给大家介绍下Python中pyautogui库的使用方法汇总,感兴趣的朋友跟随小编一起看看吧
    2022-03-03
  • python 计算数据偏差和峰度的方法

    python 计算数据偏差和峰度的方法

    今天小编就为大家分享一篇python 计算数据偏差和峰度的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python使用Matplotlib画条形图

    python使用Matplotlib画条形图

    这篇文章主要为大家详细介绍了python使用Matplotlib画条形图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 查看keras各种网络结构各层的名字方式

    查看keras各种网络结构各层的名字方式

    这篇文章主要介绍了查看keras各种网络结构各层的名字方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python基于内置库pytesseract实现图片验证码识别功能

    Python基于内置库pytesseract实现图片验证码识别功能

    这篇文章主要介绍了Python基于内置库pytesseract实现图片验证码识别功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论