使用pygal展示世界各国人口分布情况

一、环境信息

python版本:2.7.13

pygal版本:2.4.0

pygal安装:pip install pygal 从python官方完整下载的最新的python版本自带pip

 

二、具体实现

1、下载数据

 http://data.okfn.org/ 

这个网站提供了大量可以可以免费使用的数据集,可以从里面下载。例如:https://datahub.io/JohnSnowLabs/population-figures-by-country 这个页面就可以下载各个国家和地区的从1960年开始的人口数据。

此随笔里面所用数据我已传到后台,下载路径为:https://files.cnblogs.com/files/dbtd/population_data.rar  ,下载后解压的文件名称为population_data.json

 

2、获取两个字母的国别码

Pygal的地图制作工具要求数据为特定的格式:用国别码表示国家(有几种类型的国别码,只要明白国别码用来表示一个国家就可以了,如CN表示中国),用数字表示人口。population_data.json中包含的是三个字母的国别码,但Pygal使用两个字母的国别码。我们需要把population_data.json里面的国家数据转换为两个字母的国别码。代码如下:

country_codes.py
# -*- coding: utf-8 -*-

from pygal.maps.world import COUNTRIES

def get_country_code(country_name):
    for code, name in COUNTRIES.items():
        if name == country_name:
            return code
    return None

备注:COUNTRIES是个字典,里面存储了国家名称和两位国别码的对应关系,for code, name in COUNTRIES.items() 是对字典进行遍历

 

3、绘制人口地图

具体代码如下:

world_population.py
# -*- coding: utf-8 -*-

import json
from country_codes import get_country_code
from pygal.maps.world import World
from pygal.style import RotateStyle, LightColorizedStyle

with open('population_data.json') as f:
    pop_data = json.load(f) #加载json数据,变成了一个list

country_population1 = {}
country_population2 = {}
country_population3 = {}

for pop_dict in pop_data:
    if pop_dict['Year'] == '2010':
        country_name = pop_dict['Country Name']
        country_code = get_country_code(country_name)
        population = pop_dict['Value']
        #将国家进行分组:分为小于一千万,十亿,大于十亿
        if country_code:
            if int(population) < 10000000:
                country_population1[country_code] = int(population)
            elif int(population) < 100000000:
                country_population2[country_code] = int(population)
            else:
                country_population3[country_code] = int(population)

print len(country_population1), len(country_population2), len(country_population3)  #查看每个分组有多少个国家

wm_style = RotateStyle('#336699', base_style=LightColorizedStyle)
wm = World(style=wm_style)
wm.title = 'World Population in 2010, by Country'
wm.add('0-10m', country_population1)
wm.add('10m-1bn', country_population2)
wm.add('>1bn', country_population3)
wm.render_to_file('world_population.svg')   #保存为svg文件,可以直接用浏览器打开

简单说明:

①首先将json文件里面的人口数据使用json库整理,变成了一个list。  然后定义三个字典,分别用于存储人口小于一千万,大于一千万少于十亿,大于十亿的国家数据。  这里只绘制2010年国家人口地图。

② RotateStyle是pygal里面的样式。创建这个类的实例时,需要提供一个实参 —— 十六进制的 RGB 颜色。十六进制格式 的 RGB 颜色是一个以井号( # )打头的字符串,后面跟着 6 个字符,其中前两个字符表示红色分量,接下来的两个表示绿色分量,最后两个表示蓝色分量。每个分量的取值范围为 00 (没有相应的颜色) ~FF (包含最多的相应颜色)。如果你在线搜索 hex color chooser ( 十六进制颜色选择器 ),可找到让你能够尝试选择不同的颜色并显示其 RGB 值的工具。这里使用的颜色值( #336699 )混合了少量的红色( 33 )、多一些的绿色( 66 )和更多一些的蓝色( 99 ),它为 RotateStyle 提供了一种淡蓝色基色。

③Pygal 通常默认使用较暗的颜色主题。使用 LightColorizedStyle 加亮了地图的颜色。 

④wm.title:设置图表标题。 wm.add:它接受一个标签和一个字典(列表)。每次调用 add() 都将为指定的国家分组选择一种新颜色,并在图表左边显示该颜色和指定的标签。

如也可以这样使用wm.add(标签和list)

wm.add('North America', ['ca', 'mx', 'us'])
wm.add('Central America', ['bz', 'cr', 'gt', 'hn', 'ni', 'pa', 'sv'])
wm.add('South America', ['ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf','gy', 'pe', 'py', 'sr', 'uy', 've'])

 

⑤render_to_file() 创建一个包含该图表的 .svg 文件,svg文件可以直接使用浏览器打开。打开后图表如下:

 

转载于:https://www.cnblogs.com/dbtd/p/8340649.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值