zoukankan      html  css  js  c++  java
  • Pygal之世界地图绘制from pygal.i18n import COUNTRIES 报错的解决办法

    《Python编程:从入门到实践》书中的一个项目用到pygal.i18n获取国别码,

    问题描述:
    在学习《python编程:从入门到精通》的pygal绘制世界地图时,遇到了这样一个问题:
    运行程序报错,提示模型不存在,出错代码如下:

    from pygal.i18n import COUNTRIES
    1
    查阅pygal文档可知,这个模块已被遗弃,使用新的map包,地图绘制命令变为:

    wm = pygal.maps.world.World()
    1
    解决办法:
    在Anaconda的Anaconda prompt中输入命令:pip install pygal_maps_world 安装包,

    然后,导入文件修改相应代码即可。此包导入命令如下:

    import pygal.maps.world
    1
    最后,贴出完整代码(python采用缩进格式,一定合理缩进代码):
    文件country_codes.py代码:

    import pygal.maps.world # 导入世界地图包pygal_maps_world

    # 定义函数,返回适用于pygal的两位国别码
    def get_country_code(country_name):
    # pygal两位国别码列表表示法:pygal.maps.world.COUNTRIES.items()
    for code,name in pygal.maps.world.COUNTRIES.items():
    if name == country_name:
    return code
    return None


    文件 country_codes.py代码如下:

    import json
    import pygal.maps.world # 导入世界地图绘制包,用于绘制地图
    from country_codes import get_country_code # 导入国别码识别包

    # 读取数据文件population_data.json(不知哪儿可以加载数据文件,需要的可以留言)
    filename = 'population_data.json'
    with open(filename) as f:
    pop_data = json.load(f) # 将json格式转换为python识别格式

    cc_populations = {} # 用于存储人口数据
    for pop_dict in pop_data:
    if pop_dict['Year'] == '2010': # 提取2010年的数据
    country_name = pop_dict['Country Name']
    # 将格式不统一的人口数据转换为浮点型,再转换为int型统一格式,供pygal绘图使用
    population =int(float( pop_dict['Value']))
    code = get_country_code(country_name)
    # 按国别码提取正确的国家和对应人口数据
    if code:
    cc_populations[code]=population

    #根据人口数量将国家分成三组,0-1千万,1千万-10亿,10亿以上
    cc_pops_1,cc_pops_2,cc_pops_3 = {},{},{}
    for cc,pop in cc_populations.items():
    if pop < 10000000:
    cc_pops_1[cc] = pop
    elif pop < 1000000000:
    cc_pops_2[cc] = pop
    else:
    cc_pops_3[cc] = pop

    wm = pygal.maps.world.World() # 生成世界地图实例
    wm.title = 'World Population in 2010, by Country' # 设置标题
    wm.add('1-10m',cc_pops_1) # 添加0——1千万的国家和人口
    wm.add('10m-1bn',cc_pops_2) # 添加1千万——10亿的国家和人口
    wm.add('>bn',cc_pops_3) # 添加10亿以上的国家和人口
    wm.render_to_file('world_population.svg') # 渲染视图到文件,通过浏览器可查看
    将两个文件保存到同一目录,运行文件country_codes.py,以浏览器的方式打开world_population.svg文件,即可看到文章开头展示的图片内容。

  • 相关阅读:
    Tomcat8
    spring-framework-3.0.2RELEASE之后为啥没有依赖包了?
    foxmail6.5 不能收取电子邮件,反复提示输入密码?
    mysql中select distinct的用法
    mysql 批量更新
    java中数组与List相互转换的方法
    mysql 蠕虫复制
    鼠标聚焦到Text输入框时,按回车键刷新页面原因及解决方法
    com.sun.jdi.InvocationException occurred invoking method.
    linux 让一个程序开机自启动并把一个程序加为服务
  • 原文地址:https://www.cnblogs.com/dingjiaoyang/p/10490549.html
Copyright © 2011-2022 走看看