world_map

pygal-2.4
pygal-maps-world-1.0.2 世界地图模块位置变更

pygal内置世界地图模块,包括国别码模块COUNTRIES以及世界地图模块World

当前版本下,绘制世界地图,需要从pygal_maps_world.i18n中引国别码,需要从pygal_maps_world.maps中引世界地图。

参考代码如下:

countries.py

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python3
# -*- 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 or name == country_name.title():
return code
return None

population_data.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from settings import Settings
from countries import get_country_code
from pygal.style import RotateStyle as RS,LightColorizedStyle as LCS
import pygal_maps_world.maps
import json


data_setting = Settings()
filename = data_setting.json_population

with open(filename) as f_obj:
pop_data = json.load(f_obj)

#打印每个国家2010年的人口
cc_population = {}
for pop_dict in pop_data:
if pop_dict['Year'] == '2010':
country_name = pop_dict['Country Name']
population = int(float(pop_dict['Value']))
code = get_country_code(country_name)
if code:
cc_population[code] = population
#按人口给国家分组
cc_pops_1, cc_pops_2, cc_pops_3 = {}, {}, {}
for cc, pop in cc_population.items():
if pop < 10000000:
cc_pops_1[cc] = pop
elif pop < 1000000000:
cc_pops_2[cc] = pop
else:
cc_pops_3[cc] = pop

wm_style = RS('#336699',base_style=LCS)
wm = pygal_maps_world.maps.World(style=wm_style)
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_population.svg')
文章目录
  1. countries.py
  2. population_data.py
|