pyecharts世界地图map,geo可视化优化调整

2 篇文章 0 订阅
1 篇文章 0 订阅

pyecharts中提供了两种地图,map地图和geo地理坐标系,两者都能够满足地图显示需求,但在实际应用过程中,需要调整的地方还有很多。本文主要介绍关于map,geo的显示调整,因为需求为图片输出,所以不涉及交互效果部分内容。

map地图:

具体参数不多赘述,可查看pyecharts官网介绍。

map 世界地图默认为英文显示(中国及中国省市区县地图为中文显示),若传入的参数为中文则不会绘制图表,如:['China', 79246] 正常显示,['中国', 79246] 无法显示,这时候就需要一个对照表 将其转化为中文显示。(对照表赋予下一篇,也可自行寻找其他对照表)。若存在地图上没有标记的地区 不会报错,但也不会显示。

def cunchupng() -> Map:
    #数据处理
    df1 = df[['受理局', '公开(公告)号']]
    df1 = df1.groupby('受理局', as_index=False)['公开(公告)号'].count()
    df1 = df1.sort_values(by='公开(公告)号', ascending=False)
    df1.columns = ['受理局', '申请数量']
    df1 = df1.head(10) 
    listx = list(df1['受理局'])
    listy = list(df1['申请数量'])
    data_pair = [list(z) for z in zip(listx, listy)]
    c = (
        Map(init_opts=opts.InitOpts(
            bg_color='#FFFFFF',
        ))
        .add(series_name="", data_pair=data_pair, maptype="world",  # world,china 省 市
             is_map_symbol_show=False,name_map=name_map) #更改地图中文显示

        .set_series_opts(
        label_opts=opts.LabelOpts( #标签配置 若改为 True 则所有标签都会显示
            is_show=False,
            formatter="{b}",
            font_size=8, ))
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="全球专利地区分布分析",
                pos_top='2%',
                pos_left='center',
                title_textstyle_opts=opts.TextStyleOpts(font_size=30),
            ),
            legend_opts=opts.LegendOpts(
                is_show=False, ),
            visualmap_opts=opts.VisualMapOpts( #颜色映射
            is_show=True,
            min_=2500,
            max_=12000,
            range_text=['高', '低'])
    )
    )
    return c
c = cunchupng()
make_snapshot(driver, c.render(), r"D:\工具自动化绘图\全球专利地区分布分析map.png")

运行结果及效果显示:

 

 不显示标签:

 

不足之处: 1.在输出的dataframe中  ['欧洲专利局', 1646], ['世界知识产权组织', 1586] 两项并未显示,造成数据缺失。2.在标签显示中,只能选择全部显示和全不显示(为空值的地区也会显示,显示效果过于杂乱)。

geo地理坐标系:

geo相较于map优势在于:1.标签可只显示数据列表中的地区,其他为空的地区不显示。2.标记类型丰富,如散点,涟漪,柱图等。3.可以自定义新增坐标点,以经纬度为参考。4.图表简洁,可显示的信息多,如名称、数据、经纬度。区别在于:1.地图为英文显示,没有提供转换中文的参数。2.没有区域色块填充效果。

def cunchupng() -> Geo:
    df1 = df[['受理局', '公开(公告)号']]
    df1 = df1.groupby('受理局', as_index=False)['公开(公告)号'].count()
    df1 = df1.sort_values(by='公开(公告)号', ascending=False)
    df1.columns = ['受理局', '申请数量']
    df1 = df1.head(10)
    print(df1)
    listx = list(df1['受理局'])
    listy = list(df1['申请数量'])
    data_pair = [list(z) for z in zip(listx, listy)]
    print(data_pair)
    c = (
        Geo(init_opts=opts.InitOpts(
            bg_color='#FFFFFF',
        ))

        ## 新增坐标点
        .add_coordinate(
            name='中国',
            longitude=104,
            latitude=35,
        )
        .add_coordinate(
            name='日本',
            longitude=138,
            latitude=36,
        )
        .add_coordinate(
            name='韩国',
            longitude=128,
            latitude=36,
        )
        .add_coordinate(
            name='俄罗斯',
            longitude=87,
            latitude=64,
        )
        .add_coordinate(
            name='印度',
            longitude=78,
            latitude=20,
        )
        .add_coordinate(
            name='德国',
            longitude=10,
            latitude=51,
        )
        .add_coordinate(
            name='美国',
            longitude=-95,
            latitude=37,
        )
        .add_coordinate(
            name='加拿大',
            longitude=-106,
            latitude=56,
        )

        .add_coordinate(
            name='欧洲专利局',
            longitude=5,
            latitude=52,
        )
        .add_coordinate(
            name='世界知识产权组织',
            longitude=8,
            latitude=46,
        )

        .add_coordinate( #用于测试,新增点不存在与列表中,不影响正常输出
            name='测试',
            longitude=108,
            latitude=46,
        )
            .add_schema(maptype="world") #地图类型
            .add("geo", data_pair,symbol_size= 12,) #名字 数据 尺寸
            .set_series_opts(
            label_opts=opts.LabelOpts( #标签配置
                is_show=True,
                formatter="{b}",
                font_size=8,))
            .set_global_opts(
            visualmap_opts=opts.VisualMapOpts( #颜色映射
                is_show=True,
                min_=2500,
                max_=12000,
                range_text=['高', '低']),
            title_opts=opts.TitleOpts( #标题配置
                title="全球专利地区分布分析",
                pos_top='2%',
                pos_left='center',
                title_textstyle_opts=opts.TextStyleOpts(font_size=30),
            ),
            legend_opts=opts.LegendOpts(
                 is_show=False,)
        )
    )
    return c
c = cunchupng()
make_snapshot(driver, c.render(), r"D:\工具自动化绘图\全球专利地区分布分析geo.png")

 

对于geo地图英文显示问题,主要解决方法有:1.新增坐标点,尽量完善坐标点覆盖面。2.更换地图模板,采用中文显示的世界地图模板。

map与geo各有各的优劣,可根据实际情况选择使用。要是既想要色块填充,又想要只显示数据标签、自定义坐标点怎么办?可以通过图表叠加实现,pyecharts中提供了叠加的方法, 层叠多图overlap,但其只可用于直角坐标系中,不能用于map和geo的叠加,而采用多图组合grid即可实现叠加.

grid =(
        Grid(init_opts=opts.InitOpts(
            bg_color='#FFFFFF',
        ))
        .add(map,grid_opts=opts.GridOpts()) # map geo叠加 grid_opts 参数中的pos_left等 无效
        .add(geo,grid_opts=opts.GridOpts()) #个人理解 pos_left是调整直角坐标系的 图表位置 而 map geo不存在坐标系 因此无效
    )
    return grid

直接赋予map,geo代码后,更改返回值即可。

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值