[Python从零到壹] 十八.可视化分析之Basemap地图包入门详解

VSole2022-07-13 21:40:19

一.Basemap安装

这里作者只做简单介绍,我们从非官网网站下载下面两个扩展包,cp36表示Python3.6版本,Windows下64位环境加amd64,你需要找到适合自己环境的文件。

  • basemap-1.2.2-cp36-cp36m-win_amd64.whl
  • pyproj-3.0.1-cp36-cp36m-win_amd64.whl

下载地址为:

  • https://www.lfd.uci.edu/~gohlke/pythonlibs/

接下来使用PIP命令去到whl文件所在目录,然后分别进行安装。先安装Pyproj,再安装Basemap扩展包,命令如下:

pip install basemap-1.2.2-cp36-cp36m-win_amd64.whl

安装过程如下图所示:

Successfully installed basemap-1.2.2 cycler-0.11.0 kiwisolver-1.3.1 matplotlib-3.3.4 numpy-1.19.5 pillow-8.4.0 pyparsing-3.0.5 pyproj-3.0.1 pyshp-2.1.3 python-dateutil-2.8.2 six-1.16.0

接下来调用该扩展包,不再报错即表示安装成功。


二.地图绘制官方案例

首先作者给出官方文档的介绍以及简单案例,让读者体会下Basemap的魅力。官方网址:

  • https://matplotlib.org/basemap

1.Basemap简介

Basemap工具包是Matplotlib包的子包,一个用于在Python绘制2D数据至地图的库,它提供了将坐标转化为25中不同地图投影的功能,然后调用Matplotlib扩展包绘制轮廓、图像和坐标点等。

该扩展包提供了海岸线、河流、政治边界数据集以及绘制方法。其中GEOS库在内部用于将海岸线和边界特征剪切到所需的地图投影区域。下面给出官网的翻译示例,源地址:

  • https://matplotlib.org/basemap/users/geography.html

Basemap包括GSSH(现在是GSHHG)海岸线数据集以及GMT格式的河流、州和国家边界的数据集。这些数据集可以用来以不同的分辨率绘制海岸线、河流和政治边界地图。相关方法如下:

  • drawcoastlines(): 绘制海岸线。
  • fillcontinents(): 通过填充海岸线多边形为地图着色。
  • drawcountries(): 绘制国家边界。
  • drawstates(): 在北美绘制状态边界。
  • drawrivers(): 绘制河流。

此外,可以将图像用作地图背景,而不是绘制海岸线和政治边界。Basemap提供了以下几个选项:

  • drawlsmask(): 绘制高分辨率的海陆图像,指定陆地和海洋的颜色,数据源于GSHHS海岸线。
  • bluemarble(): 绘制NASA蓝色大理石图像作为地图背景。
  • shadedrelief(): 绘制阴影浮雕图像作为地图背景。
  • etopo(): 绘制一张etopo浮雕图像作为地图背景。
  • warpimage(): 使用abitrary图像作为地图背景,必须是全球新的,从国际日东线向东和南极以北覆盖世界。

2.案例分析

(1) 绘制海岸线、填充海洋和陆地区域

# -*- coding: utf-8 -*-# By:Eastmount CSDNfrom mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt # 设置basemap-Lambert Conformal m = Basemap(width=12000000,height=9000000,projection='lcc',            resolution='c',lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.) # 绘制海岸线m.drawcoastlines()# 在地图周围绘制边界并填充背景aqua(这个背景最终成为海洋的颜色)# 将大洲绘制在最上面m.drawmapboundary(fill_color='aqua') # 填充大陆coral颜色,并设置湖泊颜色为bluem.fillcontinents(color='coral',lake_color='blue')plt.show()

绘制图形如下所示:

(2) 绘制一幅海陆罩(land-sea mask)图像

# -*- coding: utf-8 -*-# By:Eastmount CSDNfrom mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt # 设置basemap Lambert-Conformal # 设置分辨率参数resolution=None 跳过处理边界数据集m = Basemap(width=12000000,height=9000000,projection='lcc',            resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.) # 为地图背景绘制海陆罩# lakes=True 意味着内陆湖和海洋颜色一致m.drawlsmask(land_color='coral',ocean_color='aqua',lakes=True)plt.show()

绘制如下图所示:

(3) 绘制美国宇航局蓝色大理石图像(the NASA Blue Marble)

# -*- coding: utf-8 -*-# By:Eastmount CSDNfrom mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt m = Basemap(width=12000000,height=9000000,projection='lcc',            resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)m.bluemarble()plt.show()

绘制如下图所示:

(4) 绘制带阴影的浮雕图像

# -*- coding: utf-8 -*-# By:Eastmount CSDNfrom mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt m = Basemap(width=12000000,height=9000000,projection='lcc',            resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)m.shadedrelief()plt.show()

绘制如下图所示:

(5) 绘制etopo浮雕图像

# -*- coding: utf-8 -*-# By:Eastmount CSDNfrom mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt m = Basemap(width=12000000,height=9000000,projection='lcc',            resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)m.etopo()plt.show()

绘制如下图所示:


三.Basemap绘制地图

1.地图投影

可能读者已经发现了,Basemap扩展包是绘制地图最重要的库之一,所以作者先讲解该库函数。同时,由于作者没有找到系统的参数介绍,只能摸着石头过河学习,也希望对您有点帮助。

为方便呈现,需要将三维球坐标系转换为二维笛卡尔坐标系,利用地图投影(Map Projection)实现。官网给出的25种映射方式如下:

  • https://matplotlib.org/basemap/users/mapsetup.html

lcc类型的核心代码如下:

m = Basemap(width=12000000,
		height=9000000,
		projection='lcc',
		resolution=None,
		lat_1=45.,
		lat_2=55,
		lat_0=50,
		lon_0=-107.)

参数介绍如下:

  • width:宽度
  • height:高度
  • projection=‘lcc’:表示规定的投影方法,改变投影方法绘制的结果也将不同,25种方式
  • resolution=None:表示跳过处理边界数据集
  • lat_0=50:维度设置为50(Latitude,值为-90到90)
  • lon_0=-107:经度设置为-107( Longitude,值为-180到180)

示例代码如下:

  • https://matplotlib.org/basemap/users/aeqd.html
# -*- coding: utf-8 -*-# By:Eastmount CSDNfrom mpl_toolkits.basemap import Basemapimport numpy as npimport matplotlib.pyplot as plt width = 28000000; lon_0 = -105; lat_0 = 40m = Basemap(width=width,height=width,projection='aeqd',            lat_0=lat_0,lon_0=lon_0) # 填充背景m.drawmapboundary(fill_color='aqua')
# 绘制海岸线并填充大陆m.drawcoastlines(linewidth=0.5)m.fillcontinents(color='coral',lake_color='aqua')
# 20度经纬度,范围-80到81 -180到180m.drawparallels(np.arange(-80,81,20))m.drawmeridians(np.arange(-180,180,20))
# 在中心绘制一个黑点xpt, ypt = m(lon_0, lat_0)m.plot([xpt],[ypt],'ko')
# 绘制标题plt.title('Azimuthal Equidistant Projection')plt.show()

运行结果如下图所示:

merc类型的核心代码如下:

m = Basemap(projection='merc',
		llcrnrlat=-80,
		urcrnrlat=80,
		llcrnrlon=-180,
		urcrnrlon=180)

参数介绍如下:

  • projection=merc’:表示规定的投影方法,墨卡托投影(Mercator Projection),广泛应用谷歌地图
  • llcrnrlat=-80:所需地图域左下角的纬度(度)Latitude
  • urcrnrlat=80:所需地图域的右上角的纬度(度)Latitude
  • llcrnrlon=-180:所需地图域左下角的经度(度)Longitude
  • urcrnrlon=180:所需地图域(度)的右上角的经度Longitude

示例:

# -*- coding: utf-8 -*-# By:Eastmount CSDNfrom mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt m = Basemap(projection='merc', llcrnrlat=-80, urcrnrlat=80,            llcrnrlon=-180, urcrnrlon=180)m.drawcoastlines()plt.show()

绘制图形如下所示:

同时,绘制一个城市点代码的常见两种方式如下:


# 上海经纬度 (31.23N,121.47E)x = 31.23y = 121.47xpt, ypt = m(x,y)m.scatter(xpt,ypt,s=2) x = 31.23y = 121.47xpt, ypt = m(x,y)m.plot([xpt],[ypt],'ko')

2.绘制全球主要城市地球仪

接下来我们学习vamei老师绘制全球主要城市的地球仪,其数据保存于major_city.txt文件中,内容如下:

  • 城市名
  • 人口名
  • 维度
  • 经度
  • 国家
Shanghai 23019148  31.23N  121.47E  ChinaMumbai   12478447  18.96N  72.82E   IndiaKarachi  13050000  24.86N  67.01E   PakistanDelhi    16314838  28.67N  77.21E   IndiaManila   11855975  14.62N  120.97E  PhilippinesSeoul    23616000  37.56N  126.99E  Korea(South)Jakarta  28019545   6.18S  106.83E  IndonesiaTokyo    35682460  35.67N  139.77E  JapanPeking   19612368  39.91N  116.39E  China

接着调用Basemap绘制图形,代码如下:

  • http://www.cnblogs.com/vamei
# -*- coding: utf-8 -*-# Written by Vamei, http://www.cnblogs.com/vamei/# Feel free to use or modify this script.from mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as pltimport numpy as np #============================================# read datanames = []pops  = []lats  = []lons  = []countries = []for line in open("major_city.txt","r"):    info = line.split()    names.append(info[0])    pops.append(float(info[1]))    lat  = float(info[2][:-1])    if info[2][-1] == 'S': lat = -lat    lats.append(lat)    lon  = float(info[3][:-1])    if info[3][-1] == 'W': lon = -lon + 360.0    lons.append(lon)    country = info[4]    countries.append(country) #============================================# set up map projection with# use low resolution coastlines.map = Basemap(projection='ortho',lat_0=35,lon_0=120,resolution='l')# draw coastlines, country boundaries, fill continents.map.drawcoastlines(linewidth=0.25)map.drawcountries(linewidth=0.25)# draw the edge of the map projection region (the projection limb)map.drawmapboundary(fill_color='#689CD2')# draw lat/lon grid lines every 30 degrees.map.drawmeridians(np.arange(0,360,30))map.drawparallels(np.arange(-90,90,30))# Fill continent wit a different colormap.fillcontinents(color='#BF9E30',lake_color='#689CD2',zorder=0)# compute native map projection coordinates of lat/lon grid.x, y = map(lons, lats)max_pop = max(pops)# Plot each city in a loop.# Set some parameterssize_factor = 80.0y_offset    = 15.0rotation    = 30for i,j,k,name in zip(x,y,pops,names):    size = size_factor*k/max_pop    cs = map.scatter(i,j,s=size,marker='o',color='#FF5600')    plt.text(i,j+y_offset,name,rotation=rotation,fontsize=10) plt.title('Major Cities in Asia & Population')plt.show()

绘制图形如下图所示:


四.总结

最后给出比较好的参考资料,供自己和大家后面学习。希望文章对大家有所帮助,该篇文章主要是个安装引入,后面还将结合项目深入介绍,推荐大家尽量结合实战进行学习,比如航班预测、中国GPD区域分析等。如果存在错误或不足之处,还请海涵。

  • Basemap可视化地图信息 - zm
  • [经验总结] 一点总结:Ubuntu+anaconda+Python+basemap(+WRF) - 气象家园
  • 绘图: matplotlib Basemap简介 - Vamei
  • Creating a Choropleth Map of the World in Python using Basemap
  • Basemap绘制中国地图 - 落叶小唱
  • 用Python画一个中国地图 - 张京

可视化
本作品采用《CC 协议》,转载必须注明作者和本文链接
Epagneul是一个可视化和调查 Windows 事件日志的工具。部署需要安装 docker 和 docker-compose。这将创建一个release包含准备就绪的 docker 图像的文件夹。将项目复制到气隙机器,然后运行:make loadmake
在大数据时代下,业务数据的有效利用已成为银行业务快速、健康发展的助推剂,我行各级分支机构也将数据应用融入到了日常的经营、管理、营销、风控中,尤其是信用卡条线。随着业务的快速发展,我行对数据的依赖性也越来越强,日常数据提取和分析的需求量变得越来越多。近三年来,每年的信用卡数据申请单数量都在300单以上,占全省申请单总量的40%左右。但是现有的数据分析工具专业性太强,业务人员无法独立使用,需要依赖技术
网络可视化的基础功能为增强对网络数据的主动管理,即流量来源进行监管、分析(识别、统计、展现、管控)与挖掘,实现网络管理、信息安全与商业智能。网络可视化系统由前端和后端两部分组成:1)前端负责流量和数据的识别采集,主要由分光器、汇聚分流设备、DPI系统实现;2)后端负责数据的各类分析应用,以软件形式为主。从下游客户来看,2022年我国网络可视化下游客户中,政府客户占比最大,达50%左右;运营商客户紧
JSON 是我们日常写代码要看的最多的数据了,服务之间的接口交互几乎都使用 JSON 格式的数据,而一个能够对 JSON 比较好可视化,并直观的去查看数据的工具非常重要。之前我一般是在 Chrome 安装 JSON 解析的插件工具,而今天要推荐的工具就要更强一点了。JSON Visio,一款能够直接将 JSON 渲染成可交互的图形化工具,通过树形结构的形式可以很直观的看到数据的内在逻辑。更多项目详情请查看如下链接。
配置好后可一建生成nginx.conf文件,同时可控制nginx使用此文件进行启动与重载,完成对nginx的图形化控制闭环。本系统通过Let's encrypt申请证书,使用acme.sh脚本进行自动化申请和续签,开启续签的证书将在每天凌晨2点进行续签, 只有超过60天的证书才会进行续签,只支持在linux下签发证书。
0x01 工具介绍信息收集过程中,大型目标收集到的子域名和解析IP的关系错综复杂,肉眼分析起来费时又费力。cobweb 蛛网 将关联数据进行可视化显示,方便快速定位目标资产。
随着大数据时代的到来,可视化产品已经不再满足于对数据进行简单展现,实时性、交互性以及更丰富的展现形式成为了数据可视化发展的重点。大数据可视化平台技术框架目前,大数据可视化平台正成为大数据领域内的技术热点。
近日,知道创宇正式推出二维码单向数据摆渡产品。该产品旨在满足政府、军队以及大型企事业单位中密级不同、独立运行的网络间,物理隔离条件下高频次、高实时性、高安全性、中低速率的数据单向传输需求。
最近发现了一款非常容易上手的可视化低代码平台,它能够极大地简化开发过程,提高开发效率。在本文中,我将为大家介绍这款平台的特点、优势以及如何使用它来快速开发大屏,开源作者真的很厉害。通过这个项目,可以使用制作自己的大数据可视化大屏、运营数据大屏、运维监控大屏等等。Go-view介绍GoView 是一个高效的拖拽式低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可制作数据大屏,
作为业界公认最严苛的厂商综合能力评估模型之一,Forrester的特定技术领域报告在全球范围内受到高度认可。根据Forrester报告,绿盟科技被列为大型NAV产品及服务供应商,主要面向用户提供NAV解决方案和硬件产品,垂直市场集中于金融、政府和电信行业。
VSole
网络安全专家