本文最后更新于 2024-06-24,文章内容可能已经过时。

问题背景:

在使用Pyecharts的map中国地图当中,数据结构已经构成,但是运行时候之后数据并没有显示出来,如下图:

原因分析:

新版Pyecharts的map中国地图,省份参数需要加上"省“,例如:“安徽”,就必须要是安徽省,这样数据才能在地图中显示,再给出的json数据中,或许会存在省市数据不符合标准map格式的情况,此时必须要对数据进行再处理。

问题解决:

def province(provice_name):
    provinces = ["北京市", "天津市", "河北省", "山西省", "内蒙古自治区", "辽宁省", "吉林省", "黑龙江省", "上海市",
                 "江苏省", "浙江省", "安徽省", "福建省", "江西省",
                 "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区", "海南省", "重庆市", "四川省",
                 "贵州省", "云南省", "西藏自治区", "陕西省", "甘肃省",
                 "青海省", "宁夏回族自治区", "新疆维吾尔自治区", "台湾省", "香港特别行政区", "澳门特别行政区"]

    for province in provinces:
        if provice_name in province:
            return province
    return "未定义名称的省份"
  1. def province(provice_name)::这是一个函数定义,函数名为 province,它接受一个参数 provice_name

  2. provinces = ["北京市", "天津市", ...]:这是一个包含省份名称的列表,其中包括了中国各个省、直辖市和自治区的名称。

  3. for province in provinces::这是一个循环,它会遍历 provinces 列表中的每个元素,将每个省份名称赋值给变量 province

  4. if provice_name in province::这是一个条件语句,检查传入的 provice_name 是否在当前遍历到的省份名称中。

  5. return province:如果找到匹配的省份,函数会返回该省份的名称。

  6. return "未定义名称的省份":如果没有找到匹配的省份,函数会返回字符串 “未定义名称的省份”

解决结果:

完整代码:

import json

from pyecharts.charts import Map
from pyecharts.options import TitleOpts, VisualMapOpts


#新版map模块限定,省份参数必须要有“省”,所以需要检查参数数据并作出调整
def province(provice_name):
    provinces = ["北京市", "天津市", "河北省", "山西省", "内蒙古自治区", "辽宁省", "吉林省", "黑龙江省", "上海市",
                 "江苏省", "浙江省", "安徽省", "福建省", "江西省",
                 "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区", "海南省", "重庆市", "四川省",
                 "贵州省", "云南省", "西藏自治区", "陕西省", "甘肃省",
                 "青海省", "宁夏回族自治区", "新疆维吾尔自治区", "台湾省", "香港特别行政区", "澳门特别行政区"]

    for province in provinces:
        if provice_name in province:
            return province
    return "未定义名称的省份"


# 读取文件数据
with open("E:/project/PycharmProjects/py_01/pythonProject/Python_练习题/resource/疫情.txt", "r",
          encoding="UTF-8") as f_map:
    cn_mapdata = f_map.read()

# 将 JSON 转换为字典类型
cn_mapdata_dict = json.loads(cn_mapdata)

# 获取省份数据 areaTree 字段
cn_province_data_list = cn_mapdata_dict["areaTree"][0]["children"]
# print(cn_province_data_list)
province_data_list = []
# 获取每个省份的确诊人数
for cn_province_data in cn_province_data_list:
    # cn_province_name_data = cn_province_data["name"]  # 获取省份名称
    # print(cn_province_name_data)
    cn_province_name_data = province(cn_province_data["name"])  #获取省份名称并调用函数进行名称处理

    cn_province_confirm_data = cn_province_data["total"]["confirm"]  # 确诊人数
    # print(cn_province_confirm_data)
    # 将获取的数据整合
    province_data_list.append((cn_province_name_data, cn_province_confirm_data))

cn_map = Map()

# 添加地图所需数据
cn_map.add("各省份确认人数", province_data_list, "china")

# 配置全局属性
cn_map.set_global_opts(
    title_opts=TitleOpts(title="全国疫情确诊人数", pos_left="center", pos_bottom="1%"),
    visualmap_opts=VisualMapOpts(
        is_show=True,  # 是否显示
        is_piecewise=True,  # 是否分段
        pieces=[
            {"min": 1, "max": 99, "label": "1-99人", "color": "white"},
            {"min": 100, "max": 999, "label": "100-999人", "color": "skyblue"},
            {"min": 1000, "max": 9999, "label": "1000-9999人", "color": "orange"},
            {"min": 10000, "max": 99999, "label": "10000-99999人", "color": "red"},
            {"min": 100000, "label": "100000+", "color": "black"}
        ]
    )
)
# 绘制图片
cn_map.render("全国疫情确诊人数地图.html")

参考来源:

作者: 于 2023-08-13 19:53:20 发布 参考链接:https://blog.csdn.net/m0_70227179/article/details/132263891