目录

一、基础地图使用

1. 安装依赖

2. 基础全国地图

3. 视觉映射器配置

二、国内疫情地图

1. 数据获取与处理

2. 创建全国疫情地图

三、省级疫情地图(以河南省为例)

1. 河南省各市数据

2. 创建河南省疫情地图

四、完整综合案例

全国各省疫情地图(完整版)

五、PyCharm中安装地图包

六、地图类型参考

七、VisualMap配置速查

八、常见问题解决

1. 地图不显示

2. 省份名称不匹配

3. 数值范围显示问题


一、基础地图使用

1. 安装依赖

# 安装pyecharts
pip install pyecharts
​
# 安装地图扩展包(必须)
pip install pyecharts-jupyter-installer
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg

2. 基础全国地图

from pyecharts.charts import Map
from pyecharts import options as opts
​
# 创建地图对象
map_chart = Map()
​
# 准备数据:[(省份,数值), ...]
data = [
    ("北京市", 100),
    ("上海市", 80),
    ("广东省", 120),
    ("江苏省", 90),
    ("浙江省", 70),
    ("四川省", 60),
]
​
# 添加数据
map_chart.add(
    series_name="数据分布",  # 系列名称
    data_pair=data,          # 数据对
    maptype="china",         # 地图类型:china(中国地图)
    is_map_symbol_show=False # 是否显示标记点
)
​
# 设置全局配置
map_chart.set_global_opts(
    title_opts=opts.TitleOpts(title="中国地图示例", pos_left="center"),
    visualmap_opts=opts.VisualMapOpts(
        min_=50,
        max_=130,
        range_color=["#e0f3f8", "#abd9e9", "#74add1", "#4575b4", "#313695"]
    ),
    legend_opts=opts.LegendOpts(is_show=False)
)
​
# 生成HTML文件
map_chart.render("china_map_base.html")
print("基础地图已生成:china_map_base.html")

3. 视觉映射器配置

from pyecharts.charts import Map
from pyecharts import options as opts
​
# 创建地图对象
map_chart = Map()
​
# 准备数据
data = [
    ("北京市", 5), ("天津市", 3), ("上海市", 8), ("重庆市", 6),
    ("广东省", 15), ("江苏省", 12), ("浙江省", 10), ("山东省", 9),
    ("四川省", 7), ("湖北省", 4), ("湖南省", 5), ("河南省", 8),
]
​
map_chart.add(
    series_name="确诊病例",
    data_pair=data,
    maptype="china",
    is_map_symbol_show=False,
    itemstyle_opts=opts.ItemStyleOpts(border_color="#111")  # 边界颜色
)
​
# 设置分段型视觉映射器
map_chart.set_global_opts(
    title_opts=opts.TitleOpts(title="全国疫情分布地图", pos_left="center"),
    
    # 分段型视觉映射
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,  # 分段型(True)或连续型(False)
        pieces=[
            {"min": 0, "max": 3, "label": "0-3人", "color": "#E8E8E8"},
            {"min": 4, "max": 6, "label": "4-6人", "color": "#B0D9B1"},
            {"min": 7, "max": 9, "label": "7-9人", "color": "#8FBC8F"},
            {"min": 10, "max": 12, "label": "10-12人", "color": "#6B8E23"},
            {"min": 13, "max": 15, "label": "13-15人", "color": "#CD853F"},
            {"min": 16, "label": "16人以上", "color": "#B22222"},
        ]
    ),
    legend_opts=opts.LegendOpts(is_show=False),
)
​
map_chart.render("china_map_piecewise.html")
print("分段地图已生成:china_map_piecewise.html")

二、国内疫情地图

1. 数据获取与处理

import json
​
# 模拟从API获取的疫情数据(实际项目中从JSON文件读取)
# 全国各省份确诊数据
raw_data = {
    "data": {
        "trend": {
            "area": [
                {"name": "广东省", "data": [1582, 1590, 1600]},
                {"name": "河南省", "data": [1273, 1280, 1285]},
                {"name": "浙江省", "data": [1205, 1210, 1215]},
                {"name": "湖南省", "data": [1100, 1105, 1108]},
                {"name": "安徽省", "data": [990, 995, 1000]},
                {"name": "江西省", "data": [935, 940, 942]},
                {"name": "江苏省", "data": [931, 935, 938]},
                {"name": "山东省", "data": [883, 888, 890]},
                {"name": "四川省", "data": [850, 855, 858]},
                {"name": "湖北省", "data": [681, 685, 688]},
                {"name": "福建省", "data": [670, 675, 678]},
                {"name": "黑龙江省", "data": [590, 595, 598]},
                {"name": "北京市", "data": [585, 588, 590]},
                {"name": "上海市", "data": [570, 575, 578]},
                {"name": "河北省", "data": [550, 555, 558]},
                {"name": "陕西省", "data": [530, 535, 538]},
                {"name": "广西壮族自治区", "data": [498, 502, 505]},
                {"name": "云南省", "data": [480, 485, 488]},
                {"name": "内蒙古自治区", "data": [420, 425, 428]},
                {"name": "天津市", "data": [350, 352, 355]},
                {"name": "贵州省", "data": [330, 332, 335]},
                {"name": "甘肃省", "data": [300, 302, 305]},
                {"name": "吉林省", "data": [280, 282, 285]},
                {"name": "新疆维吾尔自治区", "data": [270, 272, 275]},
                {"name": "宁夏回族自治区", "data": [200, 202, 205]},
                {"name": "青海省", "data": [150, 152, 155]},
                {"name": "西藏自治区", "data": [50, 52, 55]},
            ]
        }
    }
}
​
print("=== 数据处理 ===")
​
# 提取各省份最新确诊数据(取最后一日的值)
province_data = []
for area in raw_data["data"]["trend"]["area"]:
    province_name = area["name"]
    confirmed_count = area["data"][-1]  # 取最新数据
    province_data.append((province_name, confirmed_count))
    print(f"{province_name}: {confirmed_count}")
​
print(f"\n共获取 {len(province_data)} 个省份的数据")

2. 创建全国疫情地图

from pyecharts.charts import Map
from pyecharts import options as opts
​
# 准备数据
data = [
    ("广东省", 1600), ("河南省", 1285), ("浙江省", 1215), ("湖南省", 1108),
    ("安徽省", 1000), ("江西省", 942), ("江苏省", 938), ("山东省", 890),
    ("四川省", 858), ("湖北省", 688), ("福建省", 678), ("黑龙江省", 598),
    ("北京市", 590), ("上海市", 578), ("河北省", 558), ("陕西省", 538),
    ("广西壮族自治区", 505), ("云南省", 488), ("内蒙古自治区", 428),
    ("天津市", 355), ("贵州省", 335), ("甘肃省", 305), ("吉林省", 285),
    ("新疆维吾尔自治区", 275), ("宁夏回族自治区", 205), ("青海省", 155),
    ("西藏自治区", 55),
]
​
print("=== 创建全国疫情地图 ===")
​
# 创建地图
virus_map = Map()
​
# 添加数据
virus_map.add(
    series_name="累计确诊人数",
    data_pair=data,
    maptype="china",           # 中国地图
    is_map_symbol_show=False,  # 不显示标记点
    itemstyle_opts=opts.ItemStyleOpts(
        border_color="#ffffff",   # 边界颜色
        border_width=0.5          # 边界宽度
    ),
)
​
# 设置全局配置(分段型视觉映射)
virus_map.set_global_opts(
    title_opts=opts.TitleOpts(
        title="2020年全国各省份累计确诊人数分布图",
        pos_left="center",
        title_textstyle_opts=opts.TextStyleOpts(font_size=18)
    ),
    
    # 视觉映射配置(分段)
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,
        pieces=[
            {"min": 0, "max": 99, "label": "0-99人", "color": "#F0F8FF"},
            {"min": 100, "max": 299, "label": "100-299人", "color": "#B0E0E6"},
            {"min": 300, "max": 499, "label": "300-499人", "color": "#87CEEB"},
            {"min": 500, "max": 799, "label": "500-799人", "color": "#6495ED"},
            {"min": 800, "max": 1099, "label": "800-1099人", "color": "#4169E1"},
            {"min": 1100, "max": 1399, "label": "1100-1399人", "color": "#0000CD"},
            {"min": 1400, "max": 1699, "label": "1400-1699人", "color": "#8B0000"},
            {"min": 1700, "label": "1700人以上", "color": "#B22222"},
        ]
    ),
    
    # 提示框配置
    tooltip_opts=opts.TooltipOpts(
        trigger="item",
        formatter="{b}: {c}人"
    ),
    
    # 图例配置
    legend_opts=opts.LegendOpts(is_show=False),
)
​
# 保存地图
virus_map.render("china_covid_map.html")
print("✅ 全国疫情地图已生成:china_covid_map.html")

三、省级疫情地图(以河南省为例)

1. 河南省各市数据

import json
from pyecharts.charts import Map
from pyecharts import options as opts
​
# 河南省各市疫情数据
henan_data = [
    ("郑州市", 200), ("洛阳市", 150), ("南阳市", 140), ("周口市", 130),
    ("商丘市", 120), ("驻马店市", 110), ("新乡市", 100), ("信阳市", 95),
    ("平顶山市", 90), ("开封市", 85), ("安阳市", 80), ("许昌市", 75),
    ("濮阳市", 70), ("焦作市", 65), ("三门峡市", 60), ("漯河市", 55),
    ("鹤壁市", 50), ("济源市", 30),
]
​
print("=== 河南省各市数据 ===")
for city, count in henan_data:
    print(f"{city}: {count}人")
​
print(f"\n共 {len(henan_data)} 个城市")

2. 创建河南省疫情地图

from pyecharts.charts import Map
from pyecharts import options as opts
​
# 创建地图对象
henan_map = Map()
​
# 添加数据(maptype="河南")
henan_map.add(
    series_name="累计确诊人数",
    data_pair=henan_data,
    maptype="河南",           # 省级地图
    is_map_symbol_show=False,
    itemstyle_opts=opts.ItemStyleOpts(
        border_color="#ffffff",
        border_width=0.5
    ),
)
​
# 设置全局配置
henan_map.set_global_opts(
    title_opts=opts.TitleOpts(
        title="河南省各市累计确诊人数分布图",
        subtitle="数据来源:公开数据",
        pos_left="center",
        title_textstyle_opts=opts.TextStyleOpts(font_size=18)
    ),
    
    # 视觉映射配置(分段)
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=True,
        pieces=[
            {"min": 0, "max": 49, "label": "0-49人", "color": "#F0F8FF"},
            {"min": 50, "max": 79, "label": "50-79人", "color": "#B0E0E6"},
            {"min": 80, "max": 109, "label": "80-109人", "color": "#6495ED"},
            {"min": 110, "max": 149, "label": "110-149人", "color": "#4169E1"},
            {"min": 150, "max": 199, "label": "150-199人", "color": "#0000CD"},
            {"min": 200, "label": "200人以上", "color": "#B22222"},
        ]
    ),
    
    # 提示框配置
    tooltip_opts=opts.TooltipOpts(
        trigger="item",
        formatter="{b}: {c}人"
    ),
    
    # 图例配置
    legend_opts=opts.LegendOpts(is_show=False),
)
​
# 保存地图
henan_map.render("henan_covid_map.html")
print("✅ 河南省疫情地图已生成:henan_covid_map.html")

四、完整综合案例

全国各省疫情地图(完整版)

import json
from pyecharts.charts import Map
from pyecharts import options as opts
​
# 准备全国各省疫情数据
china_regions = [
    # 省份名必须与pyecharts地图中的名称完全一致
    {"name": "北京市", "value": 590},
    {"name": "天津市", "value": 355},
    {"name": "上海市", "value": 578},
    {"name": "重庆市", "value": 680},
    {"name": "河北省", "value": 558},
    {"name": "山西省", "value": 380},
    {"name": "辽宁省", "value": 450},
    {"name": "吉林省", "value": 285},
    {"name": "黑龙江省", "value": 598},
    {"name": "江苏省", "value": 938},
    {"name": "浙江省", "value": 1215},
    {"name": "安徽省", "value": 1000},
    {"name": "福建省", "value": 678},
    {"name": "江西省", "value": 942},
    {"name": "山东省", "value": 890},
    {"name": "河南省", "value": 1285},
    {"name": "湖北省", "value": 688},
    {"name": "湖南省", "value": 1108},
    {"name": "广东省", "value": 1600},
    {"name": "海南省", "value": 350},
    {"name": "四川省", "value": 858},
    {"name": "贵州省", "value": 335},
    {"name": "云南省", "value": 488},
    {"name": "陕西省", "value": 538},
    {"name": "甘肃省", "value": 305},
    {"name": "青海省", "value": 155},
    {"name": "台湾省", "value": 300},
    {"name": "香港特别行政区", "value": 450},
    {"name": "澳门特别行政区", "value": 120},
    {"name": "广西壮族自治区", "value": 505},
    {"name": "内蒙古自治区", "value": 428},
    {"name": "宁夏回族自治区", "value": 205},
    {"name": "新疆维吾尔自治区", "value": 275},
    {"name": "西藏自治区", "value": 55},
]
​
# 过滤掉数据为0或无效的省份
valid_data = [(item["name"], item["value"]) for item in china_regions if item["value"] > 0]
​
print("=== 地图数据统计 ===")
print(f"共 {len(valid_data)} 个省份/地区")
print(f"最高确诊: {max(valid_data, key=lambda x: x[1])}")
print(f"最低确诊: {min(valid_data, key=lambda x: x[1])}")
​
# 创建地图
covid_map = Map()
​
covid_map.add(
    series_name="累计确诊人数",
    data_pair=valid_data,
    maptype="china",
    is_map_symbol_show=False,
    label_opts=opts.LabelOpts(is_show=True, font_size=10),  # 显示省份标签
    itemstyle_opts=opts.ItemStyleOpts(
        border_color="#333333",
        border_width=0.5,
        area_color="#F5F5F5"
    ),
)
​
# 全局配置
covid_map.set_global_opts(
    # 标题
    title_opts=opts.TitleOpts(
        title="全国各省份疫情累计确诊分布图",
        subtitle="数据截止日期:2024年",
        pos_left="center",
        title_textstyle_opts=opts.TextStyleOpts(font_size=20, font_weight="bold"),
        subtitle_textstyle_opts=opts.TextStyleOpts(font_size=14)
    ),
    
    # 视觉映射(连续型)
    visualmap_opts=opts.VisualMapOpts(
        is_piecewise=False,      # 连续型
        min_=0,
        max_=1700,
        range_color=[
            "#F0F8FF", "#E6E6FA", "#D8BFD8", "#DDA0DD", "#EE82EE",
            "#DA70D6", "#BA55D3", "#9932CC", "#9400D3", "#8B008B"
        ],
        calculable=True,         # 显示滑块
        range_text=["高", "低"],
        orient="vertical",       # 垂直放置
        pos_left="5%",
        pos_top="center"
    ),
    
    # 提示框
    tooltip_opts=opts.TooltipOpts(
        trigger="item",
        formatter="{b}<br/>累计确诊: {c} 人",
        background_color="rgba(0,0,0,0.7)",
        border_color="#333",
        textstyle_opts=opts.TextStyleOpts(color="#fff")
    ),
    
    # 图例
    legend_opts=opts.LegendOpts(is_show=False),
    
    # 缩放控件
    toolbox_opts=opts.ToolboxOpts(
        is_show=True,
        feature=opts.ToolBoxFeatureOpts(
            save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(is_show=True),
            restore=opts.ToolBoxFeatureRestoreOpts(is_show=True),
            zoom=opts.ToolBoxFeatureZoomOpts(is_show=True)
        )
    ),
)
​
# 保存文件
covid_map.render("china_complete_covid_map.html")
print("\n✅ 全国完整疫情地图已生成:china_complete_covid_map.html")
print("请在浏览器中打开该文件查看可视化效果")

五、PyCharm中安装地图包

# 方法1:命令行安装
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
​
# 方法2:一次性安装
pip install pyecharts echarts-countries-pypkg echarts-china-provinces-pypkg echarts-china-cities-pypkg

六、地图类型参考

maptype值 说明 示例
"china" 中国地图 maptype="china"
"广东" 广东省地图 maptype="广东"
"河南" 河南省地图 maptype="河南"
"浙江" 浙江省地图 maptype="浙江"
"四川" 四川省地图 maptype="四川"
"北京" 北京市地图 maptype="北京"

七、VisualMap配置速查

# 连续型视觉映射
opts.VisualMapOpts(
    is_piecewise=False,      # 连续型
    min_=0,                  # 最小值
    max_=100,                # 最大值
    range_color=["#blue", "#red"]  # 颜色范围
)
​
# 分段型视觉映射
opts.VisualMapOpts(
    is_piecewise=True,       # 分段型
    pieces=[                 # 分段规则
        {"min": 0, "max": 10, "label": "0-10", "color": "#green"},
        {"min": 11, "max": 50, "label": "11-50", "color": "#yellow"},
        {"min": 51, "label": "51以上", "color": "#red"},
    ]
)

八、常见问题解决

1. 地图不显示

# 确认已安装地图包
import echarts_countries_pypkg
import echarts_china_provinces_pypkg
​
print("地图包已安装")

2. 省份名称不匹配

# 省份名称必须与pyecharts内置名称一致
# 正确示例:
("广西壮族自治区", 100)  # ✅
("广西", 100)           # ❌
​
# 查看所有可用地图名称
from pyecharts.datasets import register_url
# 参考官方文档查询

3. 数值范围显示问题

# 使用分段型visualmap解决数值分布不均
opts.VisualMapOpts(
    is_piecewise=True,
    pieces=[
        {"min": 0, "max": 10, "label": "0-10"},
        {"min": 11, "max": 100, "label": "11-100"},
        {"min": 101, "label": "101+"},
    ]
)

更多推荐