• Python3 使用pygal 生成世界人口地图


      最近在看<python从入门到实践>,其中有一个例子是使用pygal制作世界人口地图,觉得挺有意思的,这里就记录下来了, 其实代码不是很复杂,使用环境环境python3.废话不多说,直接上代码

    country_codes.py

    返回当前国家的国别码

    需要安装pygal_maps_world  

    pip install pygal_maps_world

    # *- coding: utf-8 -*-
    from pygal_maps_world.i18n import COUNTRIES
    
    
    def get_country_code(country_name):
        for code, name in COUNTRIES.items():
            if name == country_name:
                return code
    
        return None
    
    
    if __name__ == '__main__':
        print(get_country_code('China'))

    world_pople.py

    需要安装pygal

    pip install pygal

    # *- coding: utf-8 -*-
    import json
    from country_codes import get_country_code
    import pygal_maps_world.maps as pm
    from pygal.style import RotateStyle
    
    
    with open('population_data.json') as f:
        data = json.load(f)
        cc_populations = {}
        for line in data:
            if line['Year'] == '2010':   #查找年分为2010年的
                country_name = line['Country Name']
                population = int(float(line["Value"]))
                code = get_country_code(country_name)
                if code:
                    cc_populations[code] = population
    
    #将国家按不同范围进行分组
    cc_pops_1, cc_pops_2, cc_pops_3 = {}, {}, {}
    for cc, pop in cc_populations.items():
        if pop < 10000000:
            cc_pops_1[cc] = pop
        elif pop < 100000000:
            cc_pops_2[cc] = pop
        else:
            cc_pops_3[cc] = pop
    
    #初始化一个world对象
    wm = pm.World()
    #设置分组颜色
    wm_style = RotateStyle('#336699')
    wm.title = 'World Population in 2010, by Country'
    wm.add('0-10m', cc_pops_1)
    wm.add('10m-1bn', cc_pops_2)
    wm.add('>1bn', cc_pops_3)
    wm.render_to_file('world_populations.svg')

    效果图

    结尾 

    可以看到图片中有许多地方是没有颜色填充,这个是因为在传入国家名称的时候在 from pygal_maps_world.i18n import COUNTRIES 无法找到当前国家的国别码,所以就没有将当前国家添加到cc_populations中.

    后续这个地方会完善的.

    附件:https://files-cdn.cnblogs.com/files/charles1ee/population_data.json.tar.gz

  • 相关阅读:
    多线程上传和下载大文件(当文件服务器对上传文件大小有限制)
    http和https的区别?
    将数据导出到 excel ,然后下载下来
    注解@Transactional(rollbackFor = Exception.class) 的用法
    浅谈 MongoDB
    浅谈负载均衡
    join,left join,inner join,full join的区别?
    Bootstrap如何适配移动浏览器
    常用正则表达式
    js获取节点
  • 原文地址:https://www.cnblogs.com/charles1ee/p/11150129.html
Copyright © 2020-2023  润新知