免费编程软件「python+pycharm」
链接:https://pan.quark.cn/s/48a86be2fdc0
一、为什么选择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 # 县级地图
三、数据准备:从原始数据到可视化格式
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年各省份销售额"),
visualmapopts=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(
ispiecewise=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}
{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(
visualmapopts=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="",
datapair=data,
type="bar3D",
shading="lambert",
label_opts=opts.LabelOpts(
is_show=False
)
)
.set_global_opts(
visualmapopts=opts.VisualMapOpts(max=300)
)
)
map3d.render("3d_map.html")
九、总结与建议
快速上手:从基础代码开始,逐步添加配置项
数据验证:确保省份名称规范,数值范围合理
交互设计:合理设置缩放、标签显示等交互参数
性能优化:大数据量时考虑使用is_map_symbol_show=False隐藏标记点
持续学习:关注Pyecharts官方文档更新,掌握新特性
通过本文介绍的流程,即使没有前端开发经验,也能快速创建出专业级的交互式地图。实际项目中可根据需求组合使用基础地图、分段颜色、3D效果等特性,打造更具说服力的数据可视化作品。