import json
# pip install pygal_maps_world
# 世界地图的新包
import pygal.maps.world
from pygal.style import RotateStyle
from pygal.style import LightColorizedStyle
# 获取2位标准国别码
def get_country_code(country_name):
for code, name in pygal.maps.world.COUNTRIES.items():
if name == country_name:
return code
# 如果没有找到就返回None
return None
filename = "population_data.json"
with open(filename) as file:
pop_data = json.load(file)
cc_populations = {}
for pop_dict in pop_data:
if pop_dict["Year"] == "2010":
country_name = pop_dict["Country Name"]
poplation = int(float(pop_dict["Value"]))
# print(country_name + " : " + str(poplation))
country_code = get_country_code(country_name)
if country_code:
# print(country_code + " : " + str(poplation))
cc_populations[country_code] = poplation
else:
print("Error - " + country_name)
# 将人口数量分组
cc_pop_1, cc_pop_2, cc_pop_3 = {}, {}, {}
for cc, pop in cc_populations.items():
if pop < 10000000:
cc_pop_1[cc] = pop
elif pop < 1000000000:
cc_pop_2[cc] = pop
else:
cc_pop_3[cc] = pop
# 设置主题颜色基调
# wm_style = RotateStyle("#aa6699")
wm_style = RotateStyle("#aa6699", base_style=LightColorizedStyle)
wm = pygal.maps.world.World(style=wm_style)
wm.title = "World Populations in 2010, by Country"
# wm.add("2010", cc_populations)
wm.add("0-10m", cc_pop_1)
wm.add("10m-1bn", cc_pop_2)
wm.add(">1bn", cc_pop_3)
wm.render_to_file("world_population.svg")