我之前发过一篇博文基本讲解了基本绘制地图的方法。
我这里打算直接调用api来创建实时动态地图,并且分析数据绘制了玫瑰图,雷达图。

步骤

  • 配套资源下载:
  • 第一步:配置环境
  • 第二步:爬取数据
  • 第三步:创建列表和字典
  • 第四步:将数据添加到列表中
  • 第五步:键值互换,中英文国名映射
  • 第六步:添加中文数据
  • 第七步:随机配色(给玫瑰图用的)
  • 第八步:绘图
    • 8.1 绘制世界地图(Map)
    • 8.2 玫瑰图(Pie)
    • 8.3 雷达图(Radar)

配套资源下载:

1.the_work.py
2.namemap.py

第一步:配置环境

首先,让我们配置一下环境:
python版本需要3.6.x ,pyecharts版本1.x
使用pip自动安装最新版本(这里的版本是1.7.1)
全球国家地图: echarts-countries-pypkg

pip install pyecharts
pip install echarts-countries-pypkg

调用的包:(下载配套资源,里面有namemap中英文国名映射文件)

from pyecharts.charts import Map,Pie,Radar#地图,饼形图,雷达图
from pyecharts import options as opts
from namemap import nameMap#自定义包,配套资源里面下载
import json
import requests
import random

第二步:爬取数据

从api调取数据并存储

#全球国家除中国
url1 = 'https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist'
#中国
url2='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
#读取数据转换成json格式
data_1=requests.get(url1).json()
#读取数据,转换成json格式,将['data']键所对应的值存储在data_2中
data_2 = requests.get(url2).json()['data']
#loads方法是把json对象转化为python对象,就是把数据里面的双引号变成单引号
all = json.loads(data_2)

第三步:创建列表和字典

#创建列表和字典
name=[]#国家名
confirm=[]#确x人数
dead=[]#死x人数
heal=[]#治x人数
nameMap_new={}#新中英文国名映射字典
names_new=[]#新国家名列表
ds={}#死x人数字典
hs={}#治x人数字典

第四步:将数据添加到列表中

通过读取数据向列表中添加数据,然后进行对数据的筛选,例如想要得到死亡人数>4000的国家有哪些,通过for循环遍历列表,用if条件语句实现字典的更新。

for a_dict in data_1['data']:name.append(a_dict['name'])confirm.append(a_dict['confirm'])dead.append(a_dict['dead'])heal.append(a_dict['heal'])#如果死亡人数>4000,则更新死亡人数字典if a_dict['dead'] is not None and a_dict['name'] is not None:if int(a_dict['dead']) > 4000:d = {a_dict['name']:a_dict['dead']}h = {a_dict['name']:a_dict['heal']}ds.update(d)#更新字典hs.update(h)
ds = dict(sorted(ds.items(), key = lambda k: k[1]))#根据字典中值的大小,对字典中的项排序
hs = dict(sorted(hs.items(), key = lambda k: k[1]))
country_list = ds.keys()#把ds的键赋给country_list
dead_list = ds.values()#把ds的值赋给dead_list
heal_list = hs.values()#把hs的值赋给heal_list

第五步:键值互换,中英文国名映射

在网上抓取的数据,国家名一般为中文,需要转化为英文,用到配套资源里面的namemap.py文件

#键值互换
for a,b in nameMap.items():nameMap_new[b]=a
#中英文国名映射
for i in range(len(name)):name_new=nameMap_new[name[i]]names_new.append(name_new)

第六步:添加中文数据

将中国的数据加入列表,因为在api全球里面没中国的

#添加中国数据
chinaTotal=all['chinaTotal']
confirm.append(chinaTotal['confirm'])
dead.append(chinaTotal['dead'])
heal.append(chinaTotal['heal'])
names_new.append('China')

第七步:随机配色(给玫瑰图用的)

用random()进行随机配色,用来作为“玫瑰图”的传入参数

def randomcolor(lenth):colors = []for i in range(lenth):color_ = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']color = ""for i in range(6):color += color_[random.randint(0, 14)]#生成一个指定范围内的整数colors.append("#" + color)return colors
color_matching = randomcolor(len(dead_list))

第八步:绘图

绘制世界地图(Map),玫瑰图(Pie),雷达图(Radar),并且输出为三个html文件。
其中:

  • 世界地图里面有几个国家没有数据
  • Radar()函数的数据的传入,需要将数据升级为多维数据,并且通过输出的值判断给定数据的大小

8.1 绘制世界地图(Map)

里面具体的参数配置,参考我之前的博文,本文件头有链接。

map = Map( init_opts=opts.InitOpts(width="1900px", height="900px", bg_color="#d0effa", page_title="全xxxx_2"))map.add("确x人数",[list(z) for z in zip(names_new, confirm)],is_map_symbol_show=False,maptype="world",label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color="rgb(98,121,146)"))#地图区域颜色map.set_global_opts(title_opts = opts.TitleOpts(title='全xxxx诊人数'),legend_opts=opts.LegendOpts(is_show=False),visualmap_opts=opts.VisualMapOpts(max_=10000000, is_piecewise=True,pieces=[{"max": 10000000, "min": 100001, "label": ">1000", "color": "#8A0808"},{"max": 100000, "min": 10001, "label": "500-1000", "color": "#B40404"},{"max": 10000, "min": 1001, "label": "100-499", "color": "#DF0101"},{"max": 1000, "min": 101, "label": "10-99", "color": "#F78181"},{"max": 100, "min": 1, "label": "1-9", "color": "#F5A9A9"},{"max": 0, "min": 0, "label": "0", "color": "#fababa"},])  )map.render('Global_new_crown_epidemic_map.html')

效果图:

8.2 玫瑰图(Pie)

pie = Pie(init_opts=opts.InitOpts(width='1900px', height='900px',page_title="全xx情_1",bg_color="#fee4e7"))# 添加数据pie.add("", [list(z) for z in zip(country_list, dead_list)],radius=['20%', '100%'],#设置内径外径center=['60%', '65%'],#中心点占比rosetype='area')#圆心角相同,通过半径展现数据大小#rosetype='radius'圆心角展现数据百分比,半径展现数据大小# 设置全局配置pie.set_global_opts(title_opts=opts.TitleOpts(title='全球xxxx',subtitle='x亡人数超过\n4000的国家\n  (除中国)',title_textstyle_opts=opts.TextStyleOpts(font_size=15,color= '#f40909'),subtitle_textstyle_opts= opts.TextStyleOpts(font_size=15,color= '#8a0b0b'),pos_right= 'center',pos_left= '57%',pos_top= '60%',pos_bottom='center'),legend_opts=opts.LegendOpts(is_show=False))# 设置系列配置和颜色pie.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position='inside', font_size=13,formatter='{b}:{c}', font_style='italic',font_family='Microsoft YaHei'))pie.set_colors(color_matching)pie.render('Global_new_crown_epidemic_Rose.html')

效果图:

8.3 雷达图(Radar)

radar = Radar(init_opts=opts.InitOpts(width='1900px',height='900px',page_title="全球xxx_3",bg_color="#d1eff3"))#由于雷达图传入的数据得为多维数据,所以这里需要做一下处理radar_data1 = [list(dead_list)]radar_data2 = [list(heal_list)]radar.add_schema(schema=[#这里的数据是在之前,调试运行一下看一下输出哪几个国家、人数opts.RadarIndicatorItem(name='巴xi', max_=8000),opts.RadarIndicatorItem(name='荷lan', max_=8000),opts.RadarIndicatorItem(name='伊lang', max_=20000),opts.RadarIndicatorItem(name='德guo', max_=40000),opts.RadarIndicatorItem(name='比利shi', max_=60000),opts.RadarIndicatorItem(name='英guo', max_=80000),opts.RadarIndicatorItem(name='法guo', max_=80000),opts.RadarIndicatorItem(name='西班ya', max_=150000),opts.RadarIndicatorItem(name='意大li', max_=150000),opts.RadarIndicatorItem(name='美guo', max_=150000),])radar.add("x亡人数",radar_data1,color='blue',areastyle_opts = opts.AreaStyleOpts(opacity = 0.2,color='blue'))radar.add("治x人数",radar_data2,color='red',areastyle_opts=opts.AreaStyleOpts(opacity=0.3,color='red'))radar.set_series_opts(label_opts=opts.LabelOpts(is_show=True))radar.set_global_opts(title_opts=opts.TitleOpts(title="X亡人数与治X人数对比")) radar.render("Death_Versus_Heal.html")

效果图:

  • 未经允许禁止转载
  • 文中有的地方可能不用讲解清楚,有任何问题大家可以留言询问
  • 代码里面部分数字参数会因为持续时间而增大
  • 完整代码见配套资源
  • 因某些原因代码中部分文字用xx代替

Python之基础详解(十二):进阶,用pyecharts绘制世界地图、玫瑰图、雷达图相关推荐

  1. Linux内核Thermal框架详解十二、Thermal Governor(2)

    本文部分内容参考 万字长文 | Thermal框架源码剖析, Linux Thermal机制源码分析之框架概述_不捡风筝的玖伍贰柒的博客-CSDN博客, "热散由心静,凉生为室空" ...

  2. Python分布式爬虫详解(二)

    上一章Python分布式爬虫详解(一)简单的介绍了什么是分布式爬虫,废话不多说,本章开始从零搭建一个爬取电影天堂电影信息的分布式爬虫. 本章知识点: a.CrawlSpider爬取电影天堂动作片第一页 ...

  3. Python之基础详解(十):用python的pyecharts模块绘制世界地图(疫情)

    pyecharts可视化疫情确诊人数世界地图 首先,我们需要进行环境的配置:python版本需要3.6.x ,pyecharts版本1.x 使用pip自动安装最新版本(这里的版本是1.7.1) 记得下 ...

  4. 攻防世界杂项(misc)--新手练习区(详解十二道题完结,附件做题过程中使用到的各种工具和网站)

    攻防世界杂项(misc)–新手练习区(详解) 第一题:this_is_flag 题目描述:Most flags are in the form flag{xxx}, for example:flag{ ...

  5. Python之基础详解(八):必备,以制作交易收盘价走趋图为例,来可视化处理json格式的文件

    在这里,我们将会用json模块来处理json格式文件.Pygal提供了一个适合初学者使用的绘图工具,我们在这里将使用它来对收盘价数据进行可视化,以帮助我们掌握基础技能.(本文所需要的文件都在资源中,记 ...

  6. Python学习基础笔记三十二——正则表达式

    官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符.及这些特定字符的组合,组成一个"规则字符串",这个规则字符串用来表达对字符串的一种过滤逻辑. 1. ...

  7. Python之基础详解(十一):PTL各模块讲解:Image、ImageFilter、ImageChops、ImageColor、ImageEnhance、ImageOps、ImageDraw

    希望迪丽热巴看到后不要锤死我~ 我是你的小粉丝儿 文章目录 一.Image模块 1.1准备工作 1.2打开和显示已有图片(open and show) 1.3创建一张新的简单图片(new) 1.4图片 ...

  8. Python零基础详解--商品详情、关键词搜索api

    为了进行此平台API的调用,首先我们需要做下面几件事情. 1. 获取一个KEY. 2. 参考API文档里的接入方式和示例. 3.查看测试工具是否有需要的接口,响应实例的返回字段是否符合参数要求. 4. ...

  9. JavaScript 各种参数 详解(十二)

    程序代码 ' *---------------------------------------------------------------------------- ' * 函数:CheckIn ...

最新文章

  1. 这本1900页的机器学习数学全书火了!完整版开放下载
  2. [JDK翻译][Executor][ExecutorService]
  3. .NET开发环境MonoDevelop 2.2 发布
  4. java SSM框架
  5. WindowsServer2012 R2 64位中文标准版(IIS8.5)下手动搭建PHP环境详细图文教程(二)安装IIS8.5...
  6. loadrunner性能测试步骤
  7. postman新手使用教程
  8. opencv-4.5.3 + opencv_contrib-4.5.3 + vtk-9.0.3编译(全流程)
  9. Markdown入门教程-不古出品
  10. 组策略 禁止用户策略下发到指定计算机,使用组策略禁止域用户运行特定程序...
  11. OpenCv图像处理之Mat类使用
  12. MyBatis-Plus之多租户架构(Multi-tenancy)——SAAS
  13. 我在用的翻译软件,微软翻译,网易有道词典
  14. win7纯净系统安装
  15. java 组合优与继承_Java中为什么老鸟要告诉你优先使用组合而不是继承?
  16. Python入门(廖雪峰老师)
  17. 驰骋工作流推出JAVA版本--JFlow
  18. 新概念英语Unit5
  19. 达梦数据库FINDS_IN_SET函数
  20. java saas osgi_基于云计算Saas平台下的C2C大型网上商城(集UC聊天客户端+Extjs+Oracle+OSGI模型)...

热门文章

  1. java word加粗_word中选中一行加粗 怎么全文都被加粗了 怎么解决
  2. SQLPLUS ed无法调出编辑面板 SP2-0107:无须保存
  3. 1月31日 解决问题的方法( 麦肯锡七步成诗法 )
  4. 【洛谷 P6151 [集训队作业2019] 青春猪头少年不会梦到兔女郎学姐】【容斥原理+生成函数】
  5. 几个有关智能的小问题
  6. 6、TWS API的体系结构和连接
  7. QCustomPlot绘图并设置游标,双游标
  8. 第1次作业:软件工程之计算机生涯序言
  9. 高级工程师面试 - 其他
  10. 交通预见未来(1):循环神经网络之LSTM,不只有七秒钟的记忆