最近在看<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