利用pygal绘制全球人口地图:JSON格式

搞技术就是修炼

请注意利用这种方法利用pygal绘制的全球地图中中国领土是有问题的,不包括香港、澳门,台湾三地。请大家谨慎使用。
经查证,pygal可视化包国别码COUNTRIES字典中是包含三地的,但将三地与中国大陆分开了,大陆部分为China,香港为Hong Kong,澳门为Macao,台湾为 Taiwan, Province of China。
而《Python编程 从入门到实践》这一本书中提供的世界人口数据中未找到台湾地区数据,且香港、澳门的名称与pygal中的名称不一致,无法将两文件内容相关联,所以在最终绘制的图中并不能显示三地的信息。
解决方案:修改json文件中香港澳门的名称与pygal中的名称相对应,即可显示。但由于未在json中找到台湾数据,无法与pygal中数据相关联。

显示pygal中国别码与国家

import pygal
from pygal_maps_world.i18n import COUNTRIES

for code in COUNTRIES.keys():
    print(code,COUNTRIES[code])

程序

import json #导入json模块
from pygal_maps_world.i18n import COUNTRIES
import pygal

def get_countries_code(country_name):
    """
    根据指定的国家,返回pygal使用的两个字母的国别码。
    pygal模块中的制图工具要求数据为特定格式:用国别码表示国家,用数字数字表示人口数量
    pygal的国别码储存pygal_maps_world.i18n模块中,字典COUNTRIES包含的键和值
    分别为两个字母的国别码和国家名,需要提前导入。
    """
    for code,name in COUNTRIES.items():
        if name==country_name:
            return code
    return None #如果没有找到就返回None



#读取文件内容
filename='population_data.json'
with  open(filename) as f:
    countries_pops=json.load(f) #读取json文件中内容,放置在countries_pops字典中

cc_pops={}#创建一个包含国别码和人口的字典
for pop_dict in countries_pops:
    if pop_dict['Year']=='2010':
        country_name=pop_dict['Country Name']#获取国家名称
        population=int(float(pop_dict['Value']))#获取人口
        code=get_countries_code(country_name)
        if code:
            cc_pops[code]=population


# 将人口数量分为三组
cc_pop_1,cc_pop_2,cc_pop_3={},{},{}
for cc,pop in cc_pops.items():
    if pop<10000000:#1000万=10m
        cc_pop_1[cc]=pop
    elif pop<1000000000:#10亿=1bn
        cc_pop_2[cc]=pop
    else:
        cc_pop_3[cc]=pop
#看看每组分别包含多少国家
print(len(cc_pop_1),len(cc_pop_2),len(cc_pop_3))


wm=pygal.maps.world.World()#绘制全球地图
wm.title="World Population in 2010,by Country"#全球人口图图名
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_populatin.svg')#生成svg格式图件,可在浏览器中打开


svg格式可选择不同分类进行显示。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值