一、为什么选择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绘制交互式地图内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论