空间地理数据图形的绘制

导 读

感谢广大读者朋友对我之前发表的[科研论文绘图]学习笔记分享(上)一文的大力支持与好评!在众多读者留言中,不少朋友表示对空间地理数据可视化方面也很感兴趣,希望我能分享更多此方面的知识。

鉴于广大读者的需求,这期我将重点介绍如何使用 Python 绘制高质量的空间地理图表。内容涵盖了地图的颜色填充、投影转换、点线面数据的可视化等知识点供大家学习参考。

关注公众号 [小Z的科研日常] ,后台回复 科研论文配图 获取PDF图书。

 论文配图和配色 

常见的地理空间数据格式包含Shapefile、GeoJSON、KML和GDB。其中以Shapefile和GeoJSON格式的地理空间数据的使用较为广泛。

因此,在一般的学术研究中,由于研究区域的独特性,常使用Shapfile文件存储地理绘制结果。在Python中的大多数情况可以使用GeoPandas()库中的read_file()和to_file()函数分别进行.shp文件的读取和写入。

 常见的地理空间地图的绘制 

在使用Python的GeoPandas()库进行基础空间数据的可视化展示过程中,主要涉及基础绘图、坐标系更改以及常见的点地图、标记研究区域、注释题图等内容。

而GeoPandas()库中GeoSeries和GeoDataFrame对象的plot()函数可以用于不同级别空间数据可视化结果。

在GeoDataFrame.plot()函数中,设置参数column为。shp文件属性变量名称可以实现将数据变量映射到地图多边形的填充颜色上,参数legend_kwds可实现对图例位置、文本大小等属性的设置。此外,通过设置camp参数对不同区域的颜色的定制化修改。

空间地理数据图形的绘制_第1张图片

(a)基本样式

空间地理数据图形的绘制_第2张图片

(b)自定义颜色

空间地理数据图形的绘制_第3张图片

(c)填充地图绘制

空间地理数据图形的绘制_第4张图片

(d)颜色修改

️ 地理空间绘图坐标系样式更改 ️

在一般的科研论文中,地理空间图的绘制涉及研究点、研究区域标记等多种图形类型,这些图形的绘制会在丰富地图信息的同时,造成坐标系空间布局过于拥挤,导致关键信息展示不全等问题。

此时,为解决上述问题,可以使用Matplotlib的中轴脊(spines)左、下位置设置函数spines.set_position()进行调整。

空间地理数据图形的绘制_第5张图片

(a)默认样式(ProPlot)

空间地理数据图形的绘制_第6张图片

(b)修改轴脊式(ProPlot)

 气泡地图 

在空间地图上,可通过绘制标记点(包括气泡、方形、三角形)对监测点或采样点位置进行标记,而在涉及除经纬度位置坐标信息以外的其他数据变量时,除采用定量变量数值颜色映射以外,还可以采用在地图上绘制气泡的形式展示。

其不但可以直接展示三点位置展示地图空间信息分布,还可以通过气泡大小对监测点数值大小进行更为直观的展示。

与普通气泡图的唯一区别在于绘制气泡点的X、Y位置参数为经纬度位置参数,使用ax.scatter()的方式进行绘制。同时,为避免气泡密集、相互遮蔽影响展示的情况,可以通过设置气泡透明度属性(alpha)进行调整。如下图所示。

空间地理数据图形的绘制_第7张图片

(a)单维度数值映射

空间地理数据图形的绘制_第8张图片

(b)双维度数值映射

 分级统计地图的绘制 

在分级统计地图中,合适的色级选择对研究目标在不同区域的合理展示有着很大影响。典型的颜色选择方法包括单色系渐变、双色系渐变和完整色谱变化。

而单变量分级统计地图中,可以使用GeoPandas绘制,关键在于需要将单一维度数值映射到地图的不同区域。因此需要使用GeoDataFrame对象的merger()函数将地图数据和含有共同类的维度数据进行融合处理。最后使用plot()函数设置column和cmap参数绘制不同颜色区域。如下图所示。

空间地理数据图形的绘制_第9张图片

(a)单变量分级地图单色系渐变映射

空间地理数据图形的绘制_第10张图片

(b)单变量分级地图双色系渐变映射

而双变量分级统计地图中,需要将地图上展示的两个维度的变量数据进行对应的地图区域数值映射,然后根据两个维度具体数值的范围使用分箱(bin)或四分之一方法分箱操作,以生成映射地图区域颜色的双变量类别。如下图所示。

空间地理数据图形的绘制_第11张图片

空间地理数据图形的绘制_第12张图片

空间地理数据图形的绘制_第13张图片

空间地理数据图形的绘制_第14张图片

双变量分级统计地图绘制示例

 带统计信息的地图 

当我们在地图中绘制常见的统计图,用于表示特定监测点或研究区域的不同目标之间的统计关系。带统计信息的地图的绘制实际上是地图和统计图两个绘图图层的叠加。

而GeoPandas和Matplotlib的axex.Axes.inset_axes()函数的结合即可绘制带统计信息的地图,其中,GeoDataFrame.plot()用于绘制地图文件数据,axes.Axes.inset_axes()则用于绘制每个经纬度位置的统计地图。如下图。

空间地理数据图形的绘制_第15张图片

(a)带柱形图的地图示例

空间地理数据图形的绘制_第16张图片

(b)带饼图的地图示例

 类型地图  

类型地图主要在地图上使用不同颜色表示需要特别标记的区域的地图,更多使用GeoDataFrame.plot()函数设置不同区域颜色即可,对于注释文本,则需要使用Matplotlib的axes.Axes.text()函数对不同数据进行绘制添加。如下图。

空间地理数据图形的绘制_第17张图片

(a)类型地图绘制样式

空间地理数据图形的绘制_第18张图片

(b)文本添加绘制样式

空间地理数据图形的绘制_第19张图片

(c)注释文本阴影效果

空间地理数据图形的绘制_第20张图片

(d)注释文本阴影效果

 等值线 

该类型地图主要用于显示海拔、温度、降雨量或其它检测指标数值相同的区域。此外,等值线还可以使用颜色来显示某些数值相同的区域。如下图所示,分别展示了绘制等值线地图时所需测试点的分布和数值颜色映射。如果涉及的点过多,则需进行透明度设置,有助于观察其疏密程度。

空间地理数据图形的绘制_第21张图片

(a)位置点分布(透明度设置)

空间地理数据图形的绘制_第22张图片

(b)位置点分布(数值映射颜色)

等值线地图的绘制前提是要有整个地图区域的网格数据进行覆盖,但是也会常常使用克里金插值法。在Python的实现中,可以使用PyKrige库进行插值操作。

PyKrige库中的OrdinaryKriging()方法并结合已有的测试点信息进行克里金插值算法的构建,再将该算法应用到新的网格数据点上以获取对应的插值数据,最后,使用Matplotlib的axes.Axes.pcolormesh()和contour()函数绘制插值结果与对应的等值线。如下图。

空间地理数据图形的绘制_第23张图片

(a)PyKrige库插值计算的网格样式

空间地理数据图形的绘制_第24张图片

(b)根据地图文件裁剪的插值结果

对于裁剪操作,需要先将插值结果使用GeoPandas.GeoDataFrame()方法转换成地理类型数据,再使用Geopandas.clip()方法进行裁剪操作。

为了对比不同变异模式对克里金插值结果的影响,该图书使用不同变异模式对克里金插值结果进行计算,即使用PyKrige库进行OrdinaryKriging()方法构建时,依次更换变异模型。其变异模式包括linear、power、gaussian、sepherical、exponential和hole-effect,默认线性。如下图所示。

空间地理数据图形的绘制_第25张图片

(a)linear

空间地理数据图形的绘制_第26张图片

(b)power

空间地理数据图形的绘制_第27张图片

(c)gaussian

空间地理数据图形的绘制_第28张图片

(d)spherical

空间地理数据图形的绘制_第29张图片

(d)exponential

空间地理数据图形的绘制_第30张图片

(e)hole-effect

➕ 子地图添加 ➕

子地图添加就是在已有的地图图层上添加另一个地图图层,添加的图层可以是原地图图层的子区域,也可以是其母区域。用于做定位器地图,以更广泛、更熟悉的地理参考框架显示主地图的区域或突出特定感兴趣区域的细节。

在绘制子地图时,可以先使用Matplotlib和axes.Axes.inset_axes()函数重新添加一个绘图对象,绘制需要插入的子地图并设置合适的位置,再使用axes.Axes.annotate()函数绘制指示连接线,此外,还可以使用axes.Axes.indicate_inset_zoom()方法实现更加精美的子地图指示样式。如下图。

空间地理数据图形的绘制_第31张图片

(a)子地图样式一

空间地理数据图形的绘制_第32张图片

(b)子地图样式二

你可能感兴趣的:(信息可视化,数据分析,数据挖掘,python)