Python实现地图可视化案例详解

目录
  • ​前言
  • 一、pyecharts
    • Map
    • Geo
    • Bmap
  • 二、folium
  • 结 语

​前言

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 ChartType

 data = 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才可以调用哦。注册地址:https://lbsyun.baidu.com/index.php注册获得AK,就可以开心制作地图啦,以热力图为例,代码如下。

#Bmap-散点图、热力图和涟漪图
  import pandas as pd
  from pyecharts.charts import BMap
  from pyecharts import options as opts
  from pyecharts.globals import ChartType

  data = 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

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

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

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

#folium-热力图
 import pandas as pd
 import folium
 from folium import plugins

 data = 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/" rel="external nofollow" >高德地图</a>'
#     )

folium.Marker([23.122373,113.268027],popup='<i>查理</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 plugins

 data = 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实现地图可视化案例详解的文章就介绍到这了,更多相关Python地图可视化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python使用pyecharts库画地图数据可视化的实现

    python使用pyecharts库画地图数据可视化导库中国地图代码结果世界地图代码结果省级地图代码结果地级市地图代码结果 导库 from pyecharts import options as opts from pyecharts.charts import Map 中国地图 代码 data = [('湖北', 9074),('浙江', 661),('广东', 632),('河南', 493),('湖南', 463), ('安徽', 340),('江西', 333),('重庆', 275),

  • Python实现疫情地图可视化

    一. json模块 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率. json.loads():将json格式的str转化成python的数据格式: json.loads():将python的数据格式(字典或列表)转化成json格式: # 如何将json数据解析成我们所熟悉的Python数据类型? import json # 将json格式的str转化成python的数据格式:字典 d

  • python用pyecharts实现地图数据可视化

    有的时候,我们需要对不同国家或地区的某项指标进行比较,可简单通过直方图加以比较.但直方图在视觉上并不能很好突出地区间的差异,因此考虑地理可视化,通过地图上位置(地理位置)和颜色(颜色深浅代表数值差异)两个元素加以体现.在本文案例中,基于第三方库pyecharts,对中国各省2010-2019年的GDP进行绘制. 我们先来看看最终效果: 关于绘图数据 基于时间和截面两个维度,可把数据分为截面数据.时间序列及面板数据.在本文案例中,某一年各省的GDP属于截面数据,多年各省的GDP属于面板数据.因此,

  • python实现3D地图可视化

    基于python代码的3D地图可视化,供大家参考,具体内容如下 介绍 使用Python对地图进行3D可视化.以地图为地图,可以在三维空间对轨迹.点进行可视化. 库 我们使用了多个库: 1.gdal: 主要是用于读取地图信息,这个库在GIS中很常用,使用C++代码编写的,如果安装不了需要在pypi里面找一下对应的资源. 2.opencv: 很常用的图像处理库. 3.matplotlib: 常用的可视化库 结果 废话不多说直接上结果: 代码 直接上代码,代码很简单. from osgeo impor

  • Python利用folium实现地图可视化

    folium的简介 用Python处理数据,然后用Folium将它在Leaflet地图上进行可视化.Folium能够将通过Python处理后的数据轻松地在交互式的Leaflet地图上进行可视化展示.它不单单可以在地图上展示数据的分布图,还可以使用Vincent/Vega在地图上加以标记. 这个开源库中有许多来自OpenStreetMap.MapQuest Open.MapQuestOpen Aerial.Mapbox和Stamen的内建地图元件,而且支持使用Mapbox或Cloudmade的AP

  • python-地图可视化组件folium的操作

    folium是python的一个用来绘制地图,并在地图上打点,画圈,做颜色标记的工具类.简单易学,和pandas可以很好的融合,是居家必备良品. 一 基本功能演示 import folium import webbrowser m=folium.Map(location=[40.009867,116.485994],zoom_start=10) # 绘制地图,确定聚焦点 folium.Marker([40.2,116.7],popup='<b>浮标上面的那个文字</b>').add

  • Python实现地图可视化folium完整过程

    目录 Folium简介 1.安装folium模块 2.安装jupyter 3.查看世界地图 4.查看中国地图 5.武汉市地图 6.添加标记 7.查找武汉科技大学 8.未解决 9.参考文章 Folium简介 Folium是一个基于leaflet.js的Python地图库,其中,Leaflet是一个非常轻的前端地图可视化库.即可以使用Python语言调用Leaflet的地图可视化能力.它不单单可以在地图上展示数据的分布图,还可以使用Vincent/Vega在地图上加以标记.Folium可以让你用Py

  • Python实现地图可视化案例详解

    目录 ​前言 一.pyecharts Map Geo Bmap 二.folium 结 语 ​前言 Python的地图可视化库很多,Matplotlib库虽然作图很强大,但只能做静态地图.而我今天要讲的是交互式地图库,分别为pyecharts.folium,掌握这两个库,基本可以解决你的地图可视化需求. 一.pyecharts 首先,必须说说强大的pyecharts库,简单易用又酷炫,几乎可以制作任何图表.pyecharts有v0.5和v1两个版本,两者不兼容,最新的v1版本开始支持链式调用,采用

  • python爬虫线程池案例详解(梨视频短视频爬取)

    python爬虫-梨视频短视频爬取(线程池) 示例代码 import requests from lxml import etree import random from multiprocessing.dummy import Pool # 多进程要传的方法,多进程pool.map()传的第二个参数是一个迭代器对象 # 而传的get_video方法也要有一个迭代器参数 def get_video(dic): headers = { 'User-Agent':'Mozilla/5.0 (Wind

  • Python中return用法案例详解

    python中return的用法 1.return语句就是把执行结果返回到调用的地方,并把程序的控制权一起返回 程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return. 例如: def haha(x,y): if x==y: return x,y print(haha(1,1)) 已改正: 结果:这种return传参会返回元组(1, 1) 2.但是也并不意味着一个函数体中只能有一个return 语句,例如: def test_return(x): if x >

  • Python torch.flatten()函数案例详解

    先看函数参数: torch.flatten(input, start_dim=0, end_dim=-1) input: 一个 tensor,即要被"推平"的 tensor. start_dim: "推平"的起始维度. end_dim: "推平"的结束维度. 首先如果按照 start_dim 和 end_dim 的默认值,那么这个函数会把 input 推平成一个 shape 为 [n][n] 的tensor,其中 nn 即 input 中元素个数

  • Python之基础函数案例详解

    函数就是把具有独立功能的代码块封装成一个小模块,可以直接调用,从而提高代码的编写效率以及重用性, 需要注意的是, 函数需要被调用才会执行, 而调用函数需要根据函数名调用  函数的定义格式: def 函数名(): 函数代码 使用当前文件的函数 我们直接定义一个函数然后运行程序, 函数并不会被调用 def hello(): print('hello') 想要函数被执行, 需要使用函数名来调用函数 # 定义函数 def hello(): print('hello') # 调用函数 hello()  需

  • Python 概率生成问题案例详解

    概率生成问题 有一枚不均匀的硬币,要求产生均匀的概率分布 有一枚均匀的硬币,要求产生不均匀的概率分布,如 0.25 和 0.75 利用 Rand7() 实现 Rand10() 不均匀硬币 产生等概率 现有一枚不均匀的硬币 coin(),能够返回 0.1 两个值,其概率分别为 0.6.0.4.要求使用这枚硬币,产生均匀的概率分布.即编写一个函数 coin_new() 使得它返回 0.1 的概率均为 0.5. # 不均匀硬币,返回 0.1 的概率分别为 0.6.0.4 def coin(): ret

  • Python 实现静态链表案例详解

    静态链表和动态链表区别 静态链表和动态链表的共同点是,数据之间"一对一"的逻辑关系都是依靠指针(静态链表中称"游标")来维持. 静态链表 使用静态链表存储数据,需要预先申请足够大的一整块内存空间,也就是说,静态链表存储数据元素的个数从其创建的那一刻就已经确定,后期无法更改. 不仅如此,静态链表是在固定大小的存储空间内随机存储各个数据元素,这就造成了静态链表中需要使用另一条链表(通常称为"备用链表")来记录空间存储空间的位置,以便后期分配给新添加元

  • Python之re模块案例详解

    一.正则表达式   re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用.注意: re模块是python独有的 正则表达式所有编程语言都可以使用 re模块.正则表达式是对字符串进行操作 因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式. (一)常用正则  1.字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 正则 待匹配字符 匹配

  • python数据XPath使用案例详解

    目录 XPath XPath使用方法 xpath解析原理: 安装lxml 案例-58二手房 XPath XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言. XPath使用方法 xpath解析原理: 1.实例化一个etree的对象,且需要将被解析的页面源代码数据加载到该对象中 2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获 安装lxml pip install -i https://mirro

  • Python自动化办公实战案例详解(Word、Excel、Pdf、Email邮件)

    目录 背景 实现过程 1)替换Word模板生成对应邀请函 2)将Word邀请函转化为Pdf格式 4)自动发送邮件 5)完整代码 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换

随机推荐