绘制世界人口地图
准备工作
- 文件population_data.json保存到程序所在的文件夹中,这个文件包含全球大部分 国家1960~2016年的人口数据
2.新建一个世界人口地图项目(包含以下文件)
- world_population.py # 主要程序
3.开始写代码
# world_population.py
import pygal.maps.world as pwm
import json
# 将数据加载到一个列表中
filename = 'population_data.json'
with open(filename) as f:
pop_data = json.load(f)
cc_population = {}
for pop_dict in pop_data:
if pop_dict['Year'] == 2015:
country_name = pop_dict['Country Name']
population = int(pop_dict['Value'])
code = get_country_code(country_name)
if code:
cc_population[code] = population
# 根据人口数量将所有的国家分成三组
cc_pop_1, cc_pop_2, cc_pop_3 = {}, {}, {}
for cc, pop in cc_population.items():
if pop < 10000000:
cc_pop_1[cc] = pop # 国别码-人口数量
elif pop < 1000000000:
cc_pop_2[cc] = pop
else:
cc_pop_3[cc] = pop
# 看看每组分别包含多少个国家
# print(len(cc_pop_1))
# print(len(cc_pop_2))
# print(len(cc_pop_3))
# LightColorizedStyle 加 亮了地图的颜色
# 指定基色,让三个分组的颜色差别更大
wm_style = RotateStyle('#336699', base_style=LightColorizedStyle)
wm = pwm.World(style=wm_style)
wm.title = '2016年世界各国人口数量'
wm.add('1000万以下', cc_pop_1)
wm.add('1000万~10亿', cc_pop_2)
wm.add('10亿以上', cc_pop_3)
wm.render_to_file('world_population.svg')
# countries.py
from pygal_maps_world.i18n import COUNTRIES
'''
Pygal使用的国别码存储在模块i18n ( internationalization的缩写)中。
字典COUNTRIES 包含的键和值分别为两个字母 的国别码和国家名
如: cn China
'''
for country_code in sorted(COUNTRIES.keys()):
print(country_code, COUNTRIES[country_code])
# country_codes.py
# 为获取国别码,我们将编写一个函数,它在COUNTRIES 中查找并返回国别码。
from pygal_maps_world.i18n import COUNTRIES
def get_country_code(country_name):
'''根据指定的国家,返回pygal使用的两个字母的国别码'''
for code, name in COUNTRIES.items():
if name == country_name:
return code
return None