from pygal_maps_world.i18n import COUNTRIES
# 定义函数,返回适用于pygal的两位国别码
def get_country_code(country_name):
# pygal两位国别码列表表示法:pygal.maps.world.COUNTRIES.items()
for code, name in COUNTRIES.items():
if name == country_name:
return code
return None
import json # 导入json模块
from pygal_maps_world.maps import World # 导入世界地图
from pygal.style import RotateStyle, LightColorizedStyle # 设置地图的基色
from studyofpython.data_down.world_map.country_codes import get_country_code # 导入自己设定的获取国别码的函数
cc_population = {} # 用来存储从json文件中写入的字典
cc_pops_1 = {} # 分组存储按照人口
cc_pops_2 = {}
cc_pops_3 = {}
filename = "population_data.json"
with open(filename)as f:
datas = json.load(f)
for data in datas:
if data[‘Year‘] == ‘2010‘:
country_name = data[‘Country Name‘]
population = int(float(data[‘Value‘]))
code = get_country_code(country_name)
if code:
cc_population[code] = population
else:
print(‘ERROR-‘ + country_name)
for cc, pop in cc_population.items():
if pop < 10000000:
cc_pops_1[cc] = pop
elif pop in range(10000000, 1000000000):
cc_pops_2[cc] = pop
else:
cc_pops_3[cc] = pop
print(len(cc_pops_1), len(cc_pops_2), len(cc_pops_3))
wm_style = RotateStyle(‘#336699‘, base_style=LightColorizedStyle) # 定义风格
wm = 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(‘>10bn‘, cc_pops_3)
wm.render_to_file(‘world_population.svg‘) # 存储图像
原文:https://www.cnblogs.com/xiayu1314/p/13965002.html