使用pyecharts绘制中国地图

pyecharts 是一个基于 ECharts 的 Python 数据可视化库,ECharts 是一个使用 JavaScript 实现的开源可视化库,而 Pyecharts 则是 ECharts 的 Python 封装,使得在 Python 中使用 ECharts 变得更加方便。

作为Python又一款可视化的利器,它有着非常丰富的功能。今天我们主要关注使用pyecharts绘制中国地图

在我们使用前,需要在当前的Python环境下安装pyecharts的库

pip install pyecharts

需要注意,自从 v0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件。

为了绘制地图,还要单独安装对应的地图文件包

# 全球国家地图:世界地图和 213 个国家,包括中国地图
pip install echarts-countries-pypkg 
# 中国省级地图:
pip install echarts-china-provinces-pypkg 
# 中国地级市地图:
pip install echarts-china-cities-pypkg  
# 中国县级地图:
pip install echarts-china-counties-pypkg 
# 中国区域地图:
pip install echarts-china-misc-pypkg

大家可以根据自己的需求进行对应下载

 

下面我们开始正式绘制地图

from pyecharts import options as opts
from pyecharts.charts import Map

# 准备数据(假数据,绘制中不显示,仅作为传参功能)
provinces = ["北京", "上海", "广东", "江苏", "浙江", "四川", "湖北", "湖南", "河南", "山东"]
values = [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

# 将数据转换为Pyecharts需要的格式
data = list(zip(provinces, values))

# area = "china"
# 创建地图对象
china_map = (
    Map(init_opts=opts.InitOpts(
        width="1000px",  # 设置宽度
        height="800px",  # 设置高度
    ))
    .add(
        series_name="",  # 设置为空字符串,不显示图例
        data_pair=data,
        maptype="china",  # 指定绘制地图区域
        is_map_symbol_show=False,
        label_opts=opts.LabelOpts(is_show=True)  # 显示省份标签
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="中国地图",
            pos_left="center",  # 标题居中
            pos_top="20px"  # 标题位置
        ),
        legend_opts=opts.LegendOpts(is_show=False)  # 隐藏图例
    )
)

# 渲染地图(生成HTML文件)
china_map.render("中国地图.html")

这里注意下,因为当前只想生成中国行政区域的地图显示,并没有有效的数据需要传入。但是pyecharts对应的传参似乎作为一个必须值(这里不太确定,仍不清楚是否有可以取消这个参数的配置)

目前发现的最优解是保留对应的假数据以对应传参之后,通过如下两步设定确保传参不影响输出结果

  • .add()方法中的series_name参数设为空字符串""

  • 添加legend_opts=opts.LegendOpts(is_show=False)彻底隐藏图例

 

另外经过试验,pyecharts中的图例模块原本作为map函数中一个对应的函数,此部分是可以剔除的。剔除后可以有效关闭相关图例信息的显示

        # visualmap_opts=opts.VisualMapOpts(
        #     max_=100,
        #     min_=10,
        #     is_piecewise=True,
        #     pos_left="20px",  # 图例位置
        #     pos_bottom="20px"  # 图例位置
        # ),

 

最终运行效果

以html文件输出,鼠标滚轮可以对于显示进行放大缩小调节

 

另外关于add()函数中maptype变量的赋值,可以参考pyecharts安装后,本地环境中对于指定区域的罗列。

\Python\Python310\Lib\site-packages\pyecharts\datasets\map_filename.json

 

在此json文件中出现的地名均可支持进行pyecharts的地图绘制

因此我们可以在前一段代码的基础上进行改进,使其可以一次性输出中国所有省级行政区下所有地级行政区的地图,以及直辖市、港澳台地区的地图

from pyecharts import options as opts
from pyecharts.charts import Map

import os

# 准备数据(假数据,绘制中不显示,仅作为传参功能)
provinces = ["北京", "上海", "广东", "江苏", "浙江", "四川", "湖北", "湖南", "河南", "山东"]
values = [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

# 将数据转换为Pyecharts需要的格式
data = list(zip(provinces, values))

area_name = {
             # 直辖市北京,天津,上海,重庆
             "beijing": ["北京"],
             "tianjin": ["天津"],
             "shanghai": ["上海"],
             "chongqing": ["重庆"],
             # 河北省
             "hebei": ["河北", "石家庄", "唐山", "秦皇岛", "邯郸", "邢台", "保定", "张家口", "承德", "沧州", "廊坊",
                       "衡水"],

             # 山西省
             "shanxi": ["山西", "太原", "大同", "阳泉", "长治", "晋城", "朔州", "晋中", "运城", "忻州", "临汾", "吕梁"],

             # 内蒙古自治区
             "neimenggu": ["内蒙古", "呼和浩特", "包头", "乌海", "赤峰", "通辽", "鄂尔多斯", "呼伦贝尔", "巴彦淖尔",
                           "乌兰察布", "兴安盟", "锡林郭勒盟", "阿拉善盟"],

             # 辽宁省
             "liaoning": ["辽宁", "沈阳", "大连", "鞍山", "抚顺", "本溪", "丹东", "锦州", "营口", "阜新", "辽阳",
                          "盘锦", "铁岭", "朝阳", "葫芦岛"],

             # 吉林省
             "jilin": ["吉林", "长春", "吉林市", "四平", "辽源", "通化", "白山", "松原", "白城", "延边朝鲜族自治州"],

             # 黑龙江省
             "heilongjiang": ["黑龙江", "哈尔滨", "齐齐哈尔", "鸡西", "鹤岗", "双鸭山", "大庆", "伊春", "佳木斯",
                              "七台河", "牡丹江", "黑河", "绥化", "大兴安岭地区"],

             # 江苏省
             "jiangsu": ["江苏", "南京", "无锡", "徐州", "常州", "苏州", "南通", "连云港", "淮安", "盐城", "扬州",
                         "镇江", "泰州", "宿迁"],

             # 浙江省
             "zhejiang": ["浙江", "杭州", "宁波", "温州", "嘉兴", "湖州", "绍兴", "金华", "衢州", "舟山", "台州",
                          "丽水"],

             # 安徽省
             "anhui": ["安徽", "合肥", "芜湖", "蚌埠", "淮南", "马鞍山", "淮北", "铜陵", "安庆", "黄山", "滁州", "阜阳",
                       "宿州", "六安", "亳州", "池州", "宣城"],

             # 福建省
             "fujian": ["福建", "福州", "厦门", "莆田", "三明", "泉州", "漳州", "南平", "龙岩", "宁德"],

             # 江西省
             "jiangxi": ["江西", "南昌", "景德镇", "萍乡", "九江", "新余", "鹰潭", "赣州", "吉安", "宜春", "抚州",
                         "上饶"],

             # 山东省
             "shandong": ["山东", "济南", "青岛", "淄博", "枣庄", "东营", "烟台", "潍坊", "济宁", "泰安", "威海",
                          "日照", "临沂", "德州", "聊城", "滨州", "菏泽"],

             # 河南省
             "henan": ["河南", "郑州", "开封", "洛阳", "平顶山", "安阳", "鹤壁", "新乡", "焦作", "濮阳", "许昌", "漯河",
                       "三门峡", "南阳", "商丘", "信阳", "周口", "驻马店", "济源"],

             # 湖北省
             "hubei": ["湖北", "武汉", "黄石", "十堰", "宜昌", "襄阳", "鄂州", "荆门", "孝感", "荆州", "黄冈", "咸宁",
                       "随州", "恩施土家族苗族自治州", "仙桃", "潜江", "天门", "神农架林区"],

             # 湖南省
             "hunan": ["湖南", "长沙", "株洲", "湘潭", "衡阳", "邵阳", "岳阳", "常德", "张家界", "益阳", "郴州", "永州",
                       "怀化", "娄底", "湘西土家族苗族自治州"],

             # 广东省
             "guangdong": ["广东", "广州", "韶关", "深圳", "珠海", "汕头", "佛山", "江门", "湛江", "茂名", "肇庆",
                           "惠州", "梅州", "汕尾", "河源", "阳江", "清远", "东莞", "中山", "潮州", "揭阳", "云浮"],

             # 广西壮族自治区
             "guangxi": ["广西", "南宁", "柳州", "桂林", "梧州", "北海", "防城港", "钦州", "贵港", "玉林", "百色",
                         "贺州", "河池", "来宾", "崇左"],

             # 海南省
             "hainan": ["海南", "海口", "三亚", "三沙", "儋州"],

             # 四川省
             "sichuan": ["四川", "成都", "自贡", "攀枝花", "泸州", "德阳", "绵阳", "广元", "遂宁", "内江", "乐山",
                         "南充", "眉山", "宜宾", "广安", "达州", "雅安", "巴中", "资阳", "阿坝藏族羌族自治州",
                         "甘孜藏族自治州", "凉山彝族自治州"],

             # 贵州省
             "guizhou": ["贵州", "贵阳", "六盘水", "遵义", "安顺", "毕节", "铜仁", "黔西南布依族苗族自治州",
                         "黔东南苗族侗族自治州", "黔南布依族苗族自治州"],

             # 云南省
             "yunnan": ["云南", "昆明", "曲靖", "玉溪", "保山", "昭通", "丽江", "普洱", "临沧", "楚雄彝族自治州",
                        "红河哈尼族彝族自治州", "文山壮族苗族自治州", "西双版纳傣族自治州", "大理白族自治州",
                        "德宏傣族景颇族自治州", "怒江傈僳族自治州", "迪庆藏族自治州"],

             # 西藏自治区
             "xizang": ["西藏", "拉萨", "日喀则", "昌都", "林芝", "山南", "那曲", "阿里地区"],

             # 陕西省
             "shaanxi": ["陕西", "西安", "铜川", "宝鸡", "咸阳", "渭南", "延安", "汉中", "榆林", "安康", "商洛"],

             # 甘肃省
             "gansu": ["甘肃", "兰州", "嘉峪关", "金昌", "白银", "天水", "武威", "张掖", "平凉", "酒泉", "庆阳", "定西",
                       "陇南", "临夏回族自治州", "甘南藏族自治州"],

             # 青海省
             "qinghai": ["青海", "西宁", "海东", "海北藏族自治州", "黄南藏族自治州", "海南藏族自治州", "果洛藏族自治州",
                         "玉树藏族自治州", "海西蒙古族藏族自治州"],

             # 宁夏回族自治区
             "ningxia": ["宁夏", "银川", "石嘴山", "吴忠", "固原", "中卫"],

             # 新疆维吾尔自治区
             "xinjiang": ["新疆", "乌鲁木齐", "克拉玛依", "吐鲁番", "哈密", "昌吉回族自治州", "博尔塔拉蒙古自治州",
                          "巴音郭楞蒙古自治州", "阿克苏地区", "克孜勒苏柯尔克孜自治州", "喀什地区", "和田地区",
                          "伊犁哈萨克自治州", "塔城地区", "阿勒泰地区"],

             # 香港
             "hongkong": ["香港"],

             # 澳门
             "macau": ["澳门"],

             # 台湾
             "taiwan": ["台湾"]
             }

# 遍历每个省份及其下辖城市
for province, cities in area_name.items():
    # 跳过省级行政单位(如果需要生成省级地图可以保留)
    if province == "china_provinces":
        continue

    # 构建完整目录路径
    target_dir = os.path.join("html", province)
    # 创建以省级命名的目录(自动处理多级嵌套)
    os.makedirs(target_dir, exist_ok=True)

    for city in cities:
        try:
            # 创建地图对象
            china_map = (
                Map(init_opts=opts.InitOpts(
                    width="1000px",
                    height="800px",
                ))
                .add(
                    series_name="",
                    data_pair=data,
                    maptype=city,
                    is_map_symbol_show=False,
                    label_opts=opts.LabelOpts(is_show=True)
                )
                .set_global_opts(
                    title_opts=opts.TitleOpts(
                        title=f"{city}地图",
                        pos_left="center",
                        pos_top="20px"
                    ),
                    legend_opts=opts.LegendOpts(is_show=False)
                )
            )

            # 构建文件路径
            file_path = os.path.join(target_dir, f"{city}地图.html")

            # 渲染地图
            china_map.render(file_path)
            print(f"成功生成:{file_path}")

        except Exception as e:
            print(f"生成{city}地图时出错:{str(e)}")
            continue

对于地理可视化内容感兴趣的朋友可以试一试

 

 

参考资料:https://05x-docs.pyecharts.org/#/zh-cn/prepare

posted @ 2025-04-13 12:13  大西young  阅读(556)  评论(0)    收藏  举报