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

posted @ 2019-07-08 11:31  沧澜猛兽  阅读(1079)  评论(0编辑  收藏  举报