使用pygal展现世界各国人口分布状况

1、环境信息python

python版本:2.7.13json

pygal版本:2.4.0浏览器

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

 

2、具体实现工具

一、下载数据网站

 http://data.okfn.org/ spa

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

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

 

二、获取两个字母的国别码ip

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() 是对字典进行遍历

 

三、绘制人口地图

具体代码以下:

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文件能够直接使用浏览器打开。打开后图表以下:

相关文章
相关标签/搜索