一、环境信息

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 COUNTRIESdef get_country_code(country_name):for code, name in COUNTRIES.items():if name == country_name:return codereturn 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, LightColorizedStylewith 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

使用pygal展示世界各国人口分布情况相关推荐

  1. 第4章【思考与练习2】数据文件high-speed rail.csv存放着世界各国高速铁路的情况。对世界各国高铁的数据进行绘图分析。使用Basemap绘制地图及使用Pyecharts绘制地图。

    目录 P84思考与练习2 方法一:使用Basemap绘制地图 方法二:使用Pyecharts绘制地图 P84思考与练习2 1.叙述各类图形的特点.适合展示的数据特性,以及在数据探索阶段的用途. 函数绘 ...

  2. pandas:世界各国GDP数据集数据清洗案例

    数据集:世界各国1960年至2020年国内生产总值 数据格式:CSV 数据来源:World Bank 实验环境:Jupyter Notebook 网盘链接: 百度网盘-GDP数据集 文章目录 1.1 ...

  3. 世界各国的12个王朝

    乾坤斗转星移,人间沧海桑田,千年挥手过,何辈最风流?         以下来自世界各国的12个王朝是一位学者认为世界历史上最成功的王朝,排列以时间为顺序,成功指数和影响指数以10分为满分,是作者个人的 ...

  4. 【Industry digitization】数字化技术正在全球范围内迅猛发展,世界各国和企业纷纷开启数字化转型之路

    能源数字化趋势及前沿应用 数字化技术正在全球范围内迅猛发展,世界各国和企业纷纷开启数字化转型之路.当前互联网数字化技术浪潮下,数字经济作为新生业态,正在深刻改变着人们的生产和生活方式,成为经济社会发展 ...

  5. 世界各国在海洋探索领域的进展

        随着海洋信息化的发展和各类探测设备的不断进步,海洋数据体量已经呈现出爆炸性增长的状态,海洋领域已经进入了大数据时代,全方位.连续.多源.立体的观测使得海洋数据的存量已经达到EB级别,日增量也达 ...

  6. gdp python 变迁动图_19602018年世界各国GDP排名变化Python动图实现

    上一期用MATLAB实现了世界各国GDP排名变化的动态图:1960-2018年世界各国GDP排名变化--Matlab动图实现.今天在这里用Python实现一下. 数据来源: https://data. ...

  7. 世界各国当日数据探索性分析

    2.2 读取世界各国当日数据 import chardet import pandas as pd# 查看文件编码格式 with open('./today_world.csv', 'rb') as ...

  8. 史上最全第三代半导体产业发展介绍(附世界各国研究概况解析)

    转载自:http://www.sohu.com/a/119626002_464013 导读:第3代半导体是指以氮化镓(GaN).碳化硅(SiC).金刚石.氧化锌(ZnO)为代表的宽禁带半导体材料,各类 ...

  9. 世界各国的标准用电电压频率是多少

    变频电源可以模仿世界各国的用电标准电压怕频率,所以很多的出口电器的厂商就用变频电源来测试出口电器的使用情况.每个国家的用电标准频率都是不同的,今天中港扬盛的技术员带大家了解不同国家的用电标准频率是怎样 ...

  10. 计算机网络app出现时间,一款能同时显示世界各国主要城市时间的时钟软件

    一款能同时显示世界各国主要城市时间的时钟软件 ZoneTick_World_Time ZoneTick World Time Zone Clock 这架时钟依据你的系统时钟和几次提供区域.你能够把一称 ...

最新文章

  1. Markdown语法补充
  2. VBS 自动发送邮件
  3. 编程判断元素归类_编程练习-判断是否为易混淆数
  4. 鸿蒙系统年底发布?华为人员看到这个山寨网站笑了
  5. 【Kafka】kafka 客户端 控制台 flink 都无法消费的情况
  6. 让人头皮发麻的KMP的next函数 困扰我三四天后终于解决了
  7. 消息中间件学习总结(15)——Apache RocketMQ 正式开源分布式事务消息
  8. 企业全面运营管理沙盘模拟心得_大庆职业学院举办创业技能大赛企业经营管理沙盘模拟赛...
  9. Jenkins教程:使用Jenkins进行持续集成
  10. Navicat15安装教程超详细步骤
  11. Django报错异常django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without
  12. 【java】临时文件
  13. 多线程任务超时的处理机制
  14. 第十章《日期与时间》第6节:ZoneId、ZoneRegion和ZoneOffset
  15. 锁相环载波同步MATLAB实现,利用锁相环实现载波同步
  16. 安卓手机突然很卡_为什么你的安卓手机越用越卡,真是内存不够?终于找到原因了!...
  17. Redhat/Selinux上mysql启动报错Operating system error number 13的解决方法
  18. JavaScript 双击禁止选中文字
  19. 【pytest】(二) pytest与unittest的比较
  20. 如何在三个月内创立一家估值200亿的游戏公司?

热门文章

  1. python制作网页挂机_python使用ip代理抓取网页
  2. 如何一键查看你的QQ/绑定了多少应用?
  3. 下载SAP hana镜像文件
  4. 廖雪峰Python学习
  5. 字体大宝库:40套为网页设计师准备的时尚字体(下篇)
  6. Altium Designer的元件库
  7. DSP28335-ADC与SCI实现采样回传串口
  8. python 数据类笔试题_数据分析岗Python笔试题
  9. java人脸识别Demo(数据库mongo)
  10. wps xml转换表格_如何转换Excel格式?学会这几招?1键即可完成转换