好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Matplotlib的朋友Basemap

学习一时爽,一直学习一直爽

?Hello,大家好,我是 もうり,一个从无到有的技术+语言小白。

最近一直回顾

本文于4月编写

https://blog.csdn.net/weixin_44510615/article/details/90732373 https://blog.csdn.net/weixin_44510615/article/details/90732196

basemap 是一个基于matplotlib的画世界地图的库

内容来源官网:https://matplotlib.org/basemap/

地球科学家,特别是海洋学家和气象学家的需求。Jeff Whitaker最初写了Basemap来帮助他的研究(气候和天气预报),因为当时 CDAT是python中用于绘制地图投影数据的唯一其他工具。多年来,随着其他学科(如生物学,地质学和地球物理学)的科学家们要求并提供新功能,Basemap的功能也得到了发展。

安装

https://HdhCmsTestlfd.uci.edu/~gohlke/pythonlibs/ 去这里下

河流

GSSH(现在是 GSHHG)海岸线数据集以及GMT的河流,州和国家边界的数据集 。这些数据集可用于在几种不同分辨率的地图上绘制海岸线,河流和政治边界。相关的Basemap方法是:

drawcoastlines():画海岸线。

fillcontinents():为大陆的内部着色(通过填充海岸线多边形)。

drawcountries():画出国界。

drawstates():在北美绘制州界。

drawrivers():画河流。

drawlsmask():绘制高分辨率陆海掩模作为图像,指定陆地和海洋颜色。陆海掩模来自GSHHS海岸线数据,有几种海岸线选择和像素大小可供选择。

bluemarble():绘制美国宇航局 蓝色大理石 图像作为地图背景。

shadedrelief():绘制 阴影浮雕图像作为地图背景。

etopo():绘制一个 etopo 浮雕图像作为地图背景。

warpimage():使用abitrary图像作为地图背景。图像必须是全局的,从国际日期线向东和南极向北以纬度/经度坐标覆盖世界。

开搞
 #?绘制海岸线,填补海洋和陆地区域 from?mpl_toolkits.basemap?import?Basemap import?matplotlib.pyplot?as?plt #?setup?Lambert?Conformal?basemap. m?=?Basemap(width=12000000,height=9000000,projection='lcc', ????????????resolution='c',lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.) #?draw?coastlines. m.drawcoastlines() #?draw?a?boundary?around?the?map,?fill?the?background. #?this?background?will?end?up?being?the?ocean?color,?since #?the?continents?will?be?drawn?on?top. m.drawmapboundary(fill_color='aqua') #?fill?continents,?set?lake?color?same?as?ocean?color. m.fillcontinents(color='coral',lake_color='aqua') plt.show()  

在这里插入图片描述

太空看到的样子

 from?mpl_toolkits.basemap?import?Basemap import?matplotlib.pyplot?as?plt #?setup?Lambert?Conformal?basemap. #?set?resolution=None?to?skip?processing?of?boundary?datasets. 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()  

在这里插入图片描述

世界地图的样子

 from?mpl_toolkits.basemap?import?Basemap import?matplotlib.pyplot?as?plt #?setup?Lambert?Conformal?basemap. #?set?resolution=None?to?skip?processing?of?boundary?datasets. 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()  

在这里插入图片描述

看下地球

 from?mpl_toolkits.basemap?import?Basemap import?numpy?as?np import?matplotlib.pyplot?as?plt #?lon_0?is?central?longitude?of?projection. #?resolution?=?'c'?means?use?crude?resolution?coastlines. m?=?Basemap(projection='robin',lon_0=0,resolution='c') m.drawcoastlines() m.fillcontinents(color='coral',lake_color='aqua') #?draw?parallels?and?meridians. m.drawparallels(np.arange(-90.,120.,30.)) m.drawmeridians(np.arange(0.,360.,60.)) m.drawmapboundary(fill_color='aqua') plt.title("Robinson?Projection") plt.show()  

在这里插入图片描述
 from?mpl_toolkits.basemap?import?Basemap import?numpy?as?np import?matplotlib.pyplot?as?plt #?lon_0?is?the?central?longitude?of?the?projection. #?resolution?=?'l'?means?use?low?resolution?coastlines. #?optional?parameter?'satellite_height'?may?be?used?to #?specify?height?of?orbit?above?earth?(default?35,786?km). m?=?Basemap(projection='geos',lon_0=-105,resolution='l') m.drawcoastlines() m.fillcontinents(color='coral',lake_color='aqua') #?draw?parallels?and?meridians. m.drawparallels(np.arange(-90.,120.,30.)) m.drawmeridians(np.arange(0.,420.,60.)) m.drawmapboundary(fill_color='aqua') plt.title("Full?Disk?Geostationary?Projection") plt.show()  

在这里插入图片描述
 from?mpl_toolkits.basemap?import?Basemap import?numpy?as?np import?matplotlib.pyplot?as?plt #?llcrnrlat,llcrnrlon,urcrnrlat,urcrnrlon #?are?the?lat/lon?values?of?the?lower?left?and?upper?right?corners #?of?the?map. #?resolution?=?'c'?means?use?crude?resolution?coastlines. m?=?Basemap(projection='gall',llcrnrlat=-90,urcrnrlat=90,\ ????????????llcrnrlon=-180,urcrnrlon=180,resolution='c') m.drawcoastlines() m.fillcontinents(color='coral',lake_color='aqua') #?draw?parallels?and?meridians. m.drawparallels(np.arange(-90.,91.,30.)) m.drawmeridians(np.arange(-180.,181.,60.)) m.drawmapboundary(fill_color='aqua') plt.title("Gall?Stereographic?Projection") plt.show()  

在这里插入图片描述
 %matplotlib?inline import?numpy?as?np import?matplotlib.pyplot?as?plt from?mpl_toolkits.basemap?import?Basemap plt.figure(figsize=(8,?8)) m?=?Basemap(projection='ortho',?resolution=None,?lat_0=50,?lon_0=-100) m.bluemarble(scale=0.5)  

在这里插入图片描述

使用basemap是为了如何绘制数据,而不是简单看下图片

以下是一些可用的绘图功能

物理边界和水体

DrawCoastlines() :绘制大陆海岸线

drawlsmask() :在陆地和海洋之间绘制一个遮罩,用于一个或另一个上的投影图像。

drawMapBoundary() :绘制地图边界,包括海洋的填充颜色。

draw rivers() :在地图上绘制河流

fillContinents() :用给定颜色填充大陆;可以选择用另一种颜色填充湖泊

政治界限

drawCountries() :绘制国家边界

drawStates() :绘制我们的状态边界

drawCountries() :绘制美国县边界

地图功能

drawGreatCircle() :在两点之间画一个大圆

drawParallels() :绘制等纬度线

drawMeridians() :绘制经度不变的线

draw map scale() :在地图上绘制线性比例

全球图像

blue marble() :将NASA的蓝色大理石图像投影到地图上

shaddedRelief() :将着色的浮雕图像投影到地图上

etopo() :在地图上绘制etopo浮雕图像

warpImage() :将用户提供的图像投影到地图上

对于基于边界的要素,在创建基础地图图像时必须设置所需的分辨率。 “basemap”类的“resolution”参数设置边界的详细程度,如果不使用边界,可以是“c”(粗)、“l”(低)、“i”(中)、“h”(高)、“f”(满)或“none”(无)。

将创建苏格兰美丽的斯凯岛的低分辨率和高分辨率地图

苏格兰位于57.3°N,6.2°W,使用90000×120000公里的地图

 %matplotlib?inline import?numpy?as?np import?matplotlib.pyplot?as?plt from?mpl_toolkits.basemap?import?Basemap fig,?ax?=?plt.subplots(1,?2,?figsize=(12,?8))  for?i,?res?in?enumerate(['l',?'h']): ????m?=?Basemap(projection='gnom',?lat_0=57.3,?lon_0=-6.2, ????????????????width=90000,?height=120000,?resolution=res,?ax=ax[i]) ????m.fillcontinents(color="#FFDDCC",?lake_color='#DDEEFF') ????m.drawmapboundary(fill_color="#DDEEFF") ????m.drawcoastlines() ????ax[i].set_title("resolution='{0}'".format(res))  

在这里插入图片描述 在地图上绘制数据

使用“basemap”实例将纬度和经度坐标投影到“x,y”坐标

其中一些特定于地图的方法是:

Contour()/Contourf() :绘制轮廓线或填充轮廓

imshow() :绘制图像

pcolor()/pcolormesh() :为不规则/规则网格绘制伪彩色图

plot() :绘制线条和/或标记。

scatter() :使用标记绘制点。

quiver() :绘制向量。

barbs() :绘制风倒钩。

drawGreatCircle() :画一个大圆。

有关这些函数(包括几个示例图)的详细信息,请参阅[在线文档](http://matplotlib.org/basemap/)。

读入数据来画图

 import?pandas?as?pd cities?=?pd.read_csv('data/california_cities.csv') cities.columns   Index(['Unnamed:?0',?'city',?'latd',?'longd',?'elevation_m',?'elevation_ft', ???????'population_total',?'area_total_sq_mi',?'area_land_sq_mi', ???????'area_water_sq_mi',?'area_total_km2',?'area_land_km2',?'area_water_km2', ???????'area_water_percent'], ??????dtype='object')  
 cities.head()  

在这里插入图片描述 绘制加利福尼亚城市位置、大小和人口的信息。
 #?Extract?the?data?we're?interested?in lat?=?cities['latd'].values lon?=?cities['longd'].values population?=?cities['population_total'].values area?=?cities['area_total_km2'].values  

设置地图投影,分散数据,然后创建颜色条和图例

 #?1.?Draw?the?map?background fig?=?plt.figure(figsize=(8,?8)) m?=?Basemap(projection='lcc',?resolution='h',? ????????????lat_0=37.5,?lon_0=-119, ????????????width=1E6,?height=1.2E6) m.shadedrelief() m.drawcoastlines(color='gray') m.drawcountries(color='gray') m.drawstates(color='gray')  #?2.?scatter?city?data,?with?color?reflecting?population #?and?size?reflecting?area m.scatter(lon,?lat,?latlon=True, ??????????c=np.log10(population),?s=area, ??????????cmap='Reds',?alpha=0.5)  #?3.?create?colorbar?and?legend plt.colorbar(label=r'$\log_{10}({\rm?population})$') plt.clim(3,?7)  #?make?legend?with?dummy?points for?a?in?[100,?300,?500]: ????plt.scatter([],?[],?c='k',?alpha=0.5,?s=a, ????????????????label=str(a)?+?'?km$^2$') plt.legend(scatterpoints=1,?frameon=False, ???????????labelspacing=1,?loc='lower?left')  

在这里插入图片描述

还有很多牛逼的东西

https://matplotlib.org/basemap/users/examples.html

查看更多关于Matplotlib的朋友Basemap的详细内容...

  阅读:28次

上一篇: 初识Java泛型

下一篇:Python 的前世今生