前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

Python的地图可视化库很多,Matplotlib库虽然作图很强大,但只能做静态地图。而我今天要讲的是交互式地图库,分别为pyecharts、folium,掌握这两个库,基本可以解决你的地图可视化需求。

pyecharts

首先,必须说说强大的pyecharts库,简单易用又酷炫,几乎可以制作任何图表。pyecharts有v0.5和v1两个版本,两者不兼容,最新的v1版本开始支持链式调用,采用options配置图表。pyecharts在制作地图方面,包含Map、Geo和Bmap三类,使用Map类支持世界、国家、省市和区县四级地图,使用前需独立安装。so,pip它们!

pip install pyecharts
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg

pip完之后,查看下pyecharts版本。

import pyecharts
print(pyecharts.__version__)

毋庸置疑,肯定是最新版本啦,版本号为1.6.2。

一、Map

在制作地图前,首先要有数据,我从Wind数据库导出了全国各省GDP总量数据,命名为GDP.xlsx,如下图所示。

有了数据,咱们就可以用python开始操作了,先把需要的库import一下。

import pandas as pd  #pandas是强大的数据处理库
from pyecharts.charts import Map
from pyecharts import options as opts

用pandas读取GDP.xlsx,提取2019年各省GDP数据为例,我们来制作地图。这里注意下zip() 函数,它用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。

data = pd.read_excel('GDP.xlsx')
province = list(data["province"])
gdp = list(data["2019_gdp"])
list = [list(z) for z in zip(province,gdp)]

我们来打印下list,长这样:
其实就是列表里嵌套列表的数据结构,只有这种结构把数据添加到地图中去。我们用Map类中的常用方法add、set_global_opts和render来配置地图。

c = (Map(init_opts=opts.InitOpts(width="1000px", height="600px"))  #初始化地图大小.set_global_opts(title_opts=opts.TitleOpts(title="2019年各省GDP分布图  单位:亿元"),  #配置标题visualmap_opts=opts.VisualMapOpts(type_ = "scatter"   #散点类型)).add("GDP",list,maptype="china")  #将list传入,地图类型为中国地图.render("Map1.html")
)

运行以上代码,用浏览器打开生成的Map1.html,效果如下:

有朋友可能会问了,地图倒是有了,可你这地图不好区分不同省的GDP大小呀。不慌,我们继续优化以上代码,给不同省依据GDP的大小配置不同的颜色,让你一目了然。

c = (Map(init_opts=opts.InitOpts(width="1000px", height="600px")) #可切换主题.set_global_opts(title_opts=opts.TitleOpts(title="2019年各省GDP分布图  单位:亿元"),visualmap_opts=opts.VisualMapOpts(min_=1000,max_=110000,range_text = ['GDP总量(亿)颜色区间:', ''],  #分区间is_piecewise=True,  #定义图例为分段型,默认为连续的图例pos_top= "middle",  #分段位置pos_left="left",orient="vertical",split_number=10  #分成10个区间)).add("GDP",list,maptype="china").render("Map2.html")
)

运行以上代码,用浏览器打开生成的Map2.html,效果如下:

怎么样,这下效果是不是好多了,颜色越红代表GDP越高。你所在的省份2019年GDP处于哪个颜色段呢?当然,对于有些审美较高的朋友可能还是无法满足你的要求。

既然如此,那我再优化下代码,给地图添加主题。添加主题很简单,只要import下ThemeType,然后将主题添加到Mpa()方法内。我以ThemeType.DARK为例看下效果。

from pyecharts.globals import ThemeType #引入主题
Map(init_opts=opts.InitOpts(width="1000px", height="600px",theme = ThemeType.DARK)) #添加主题ThemeType.DARK

运行一下看看效果:

有没有B格上升n个level的感觉,如果你还不满意,ok,pyecharts内置了10余种主题任你切换。萝卜青菜各有所爱,自个调去吧~

二、Geo

Geo与Map类似,可以通过设置maptype参数选择地图类型,所支持的方法也和Map类似,我这里就不赘述了,直接贴代码。

#Geo地图-涟漪图
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartTypedata = pd.read_excel('GDP.xlsx')
province = list(data["province"])
gdp = list(data["2019_gdp"])
list = [list(z) for z in zip(province,gdp)]
print(list)
c = (Geo().add_schema(maptype="china").add("geo",list,  #传入数据symbol_size=10, large_threshold=110000,  #设置涟漪大小type_=ChartType.EFFECT_SCATTER,   #地图类型为涟漪图).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=110000),title_opts=opts.TitleOpts(title="2019年各省GDP涟漪图")).render("Geomap1.html")
)

运行一下,效果如下:

三、Bmap

Bmap是百度地图的一个接口,你如果Map和Geo搞明白了,Bmap也是分分钟可以搞定的。不过,有一点要注意,你要先到百度地图开放平台注册,获取AK才可以调用哦。

注册获得AK,就可以开心制作地图啦,以热力图为例,代码如下。

#Bmap-散点图、热力图和涟漪图
import pandas as pd
from pyecharts.charts import BMap
from pyecharts import options as opts
from pyecharts.globals import ChartTypedata = pd.read_excel('GDP.xlsx')
province = list(data["province"])
gdp = list(data["2019_gdp"])
list = [list(z) for z in zip(province,gdp)]
print(list)
c = (BMap(init_opts=opts.InitOpts(width="1000px", height="600px")).add_schema(baidu_ak="你的AK", center=[120.13066322374, 30.240018034923]).add("GDP",list,type_="heatmap",  #scatter为散点图,heatmap为热力图,ChartType.EFFECT_SCATTER为涟漪图label_opts=opts.LabelOpts(formatter="{b}")).set_global_opts(title_opts=opts.TitleOpts(title="2019年各省GDP热力图"), visualmap_opts=opts.VisualMapOpts(max_=110000)).render("Bmap1.html")
)

运行后,长这样:

folium

你以为以上几个地图就能满足我J哥对数据可视化美感的追求,那你太小看J哥了,我经过研究,发现folium库才是吊炸天的存在。

首先,我用python调取了高德地图API接口,获得了广州市近6000个景点的地理数据,保存为poi_scenic_spot.csv。以下为部分数据:


然后安装folium库,设置刺激战场底图,当然你也可以换其他底图玩,代码中提供了mapbox底图、高德底图等,任你随意切换。

#folium-热力图
import pandas as pd
import folium
from folium import pluginsdata = pd.read_csv('./poi_scenic_spot.csv',encoding='utf-8')# heatmap1 = folium.Map(location=[23.122373,113.268027], zoom_start=10,control_scale = True) # 绘制地图,确定聚焦点,默认底图(加载慢)
heatmap1 = folium.Map(location=[23.122373,113.268027], zoom_start=10,control_scale = True,tiles='stamen Terrain') #刺激战场底图
# heatmap1 = folium.Map(location=[23.122373,113.268027], zoom_start=10,control_scale = True,tiles='Mapbox Bright') #mapbox底图
# heatmap1 = folium.Map(location=[23.122373,113.268027], zoom_start=10,control_scale = True,tiles='stamentoner') #黑白底图# heatmap1 = folium.Map(   #高德底图
#     location=[23.122373,113.268027],
#     zoom_start=15,
#     control_scale = True,
#     tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
#     attr='&copy; <a href="http://ditu.amap.com/">高德地图</a>'
#     )folium.Marker([23.122373,113.268027],popup='<i>J哥</i>',icon=folium.Icon(icon='cloud',color='green')).add_to(heatmap1)  #创建中心标记
heatmap1.add_child(plugins.HeatMap([[row["lat"],row["lon"]] for name, row in data.iterrows()]))  #传入经纬度
heatmap1.save("folium_map1.html")  #生成网页

迫不及待运行了下,效果如下:
哈哈哈哈,好大一只红烧鸡。

热力图有点中看不中用啊,看这图我也很难搞清楚广州的景点分布情况。那咱换个别的图试试。

#folium-聚合散点地图
import pandas as pd
import folium
from folium import pluginsdata = pd.read_csv('./poi_scenic_spot.csv',encoding='utf-8')plotmap1 = folium.Map(location=[23.122373,113.268027], zoom_start=10,control_scale = True,tiles='stamentoner')folium.Marker([23.122373,113.268027],popup='<p style="color: green">我是J哥</p>',icon=folium.Icon(icon='cloud',color='green')).add_to(plotmap1)  #创建中心标记
plotmap1.add_child(plugins.MarkerCluster([[row["lat"],row["lon"]] for name, row in data.iterrows()]))
plotmap1.save('folium_map2.html')

看效果!

你就说酷不酷,炫不炫?

当然,python的地图库还有很多,值得进一步挖掘。我以后还会写地图可视化的内容,欢迎继续关注,精彩不错过!

欢迎点击左上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。

Python轻松实现地图可视化(附详细源码)相关推荐

  1. 实战|Python轻松实现动态网页爬虫(附详细源码)

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识. 项目背景 事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码) ...

  2. beautifulsoup解析动态页面div未展开_实战|Python轻松实现动态网页爬虫(附详细源码)...

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.项目背景事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码)&g ...

  3. Python编程:实现词云生成(附详细源码)

    Python编程:实现词云生成(附详细源码) 词云是一种数据可视化的方式,它可以用来展示某个主题下的主要关键词汇.在Python中,我们可以使用 wordcloud 库来实现词云的生成.本文将带您一步 ...

  4. 自动化测试如何保持登录状态_自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码...

    一.什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage ...

  5. JUC.Condition学习笔记[附详细源码解析]

    JUC.Condition学习笔记[附详细源码解析] 目录 Condition的概念 大体实现流程 I.初始化状态 II.await()操作 III.signal()操作 3个主要方法 Conditi ...

  6. 通俗易懂玩QT:Qpaint绘制开关按钮(内附详细源码)

    Qpaint 绘制开关按钮(内附详细源码) 一.实验效果与开发环境 效果图如下: 开发环境: 二.实验代码 switch.h #ifndef SWITCH_H #define SWITCH_H#inc ...

  7. python爬虫技术源码_实战|手把手教你用Python爬虫(附详细源码)

    大家好,我是J哥,专注原创,致力于用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.最近J哥做了个爬虫小项目,感觉还挺适合新手入门的,于是迫不及待想分享给大家. 什么是爬虫? ...

  8. 实战|手把手教你用Python爬虫(附详细源码)

    什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...

  9. 爬虫实战|手把手教你用Python爬虫(附详细源码)

    什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...

  10. 最详细的爬虫实战 | 手把手教你用Python爬虫(附详细源码)

    什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...

最新文章

  1. 求逆元 - HNU 13412 Cookie Counter
  2. python编程怎么做游戏主播_如何成为一名成功的编程主播?
  3. mysql 平均月份_Mysql按月份统计和按时段统计SQL
  4. oracle ajax储存过程分页,创建 Oracle 分页存储过程
  5. 一个 Cobol 程序员的告白
  6. android 文字反转_多文字共享信息系统
  7. python 生成器装饰器_对Python生成器、装饰器、递归的使用详解
  8. 入门佳作《例解Python》来了!案例丰富尽显风度ƪ(´▽`ƪ)
  9. C/C++ map函数统计每个字母出现的次数
  10. Day21 linux安装RPM包
  11. 获取VS2012离线语言包
  12. 浏览器和服务器之间的通信
  13. 年薪30万只是中游水平,算法工程师是一种怎样的存在?
  14. web gallary
  15. rocketMQ 删除过期文件(磁盘空间不足导致mq消息发送不了)
  16. 一个比较全的vim指令记录
  17. 无线发射器c语言程序代码,单片机编码 无线模块发送与接收 程序
  18. 基于FPGA的高速ADC9XXX系列的产品研发记录与心得----系列二(玩FPGA玩到最后还是玩时钟)
  19. 【FICO】关于重复制造成本核算模式
  20. yuv 和jpg互相转

热门文章

  1. Elesticsearch(es)聚合搜索(入门到精通)4
  2. bilibili自动上传视频脚本(纯ruby)
  3. 地图上如何量方位角_经纬度计算距离和方位角
  4. 常与同好争高下,不与傻瓜论短长
  5. Postgres-XL集群的搭建和测试详解
  6. win10如何删除计算机用户,win10如何取消账户登录_win10怎么删除登录账户
  7. 【长难句分析精讲】状语从句
  8. 德州理工大学计算机科学专业录取,美国留学:德州理工大学录取要求
  9. 常用的OpenCV函数速查
  10. Blazor是春天还是寒风里的挣扎