空间地理数据图形的绘制

导 读

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

鉴于广大读者的需求,这期我将重点介绍如何使用 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参数对不同区域的颜色的定制化修改。

(a)基本样式

(b)自定义颜色

(c)填充地图绘制

(d)颜色修改

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

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

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

(a)默认样式(ProPlot)

(b)修改轴脊式(ProPlot)

💬 气泡地图 💬

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

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

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

(a)单维度数值映射

(b)双维度数值映射

📊 分级统计地图的绘制 📊

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

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

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

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

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

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

📈 带统计信息的地图 📈

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

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

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

(b)带饼图的地图示例

📍 类型地图 📍 

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

(a)类型地图绘制样式

(b)文本添加绘制样式

(c)注释文本阴影效果

(d)注释文本阴影效果

📉 等值线 📉

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

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

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

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

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

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

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

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

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

(a)linear

(b)power

(c)gaussian

(d)spherical

(d)exponential

(e)hole-effect

➕ 子地图添加 ➕

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

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

(a)子地图样式一

(b)子地图样式二

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python是一种广泛应用于地理空间数据可视化的编程语言。Python提供了众多强大的库和工具,使地理空间数据可视化变得简单和高效。 首先,Python地理空间数据可视化库包括例如GeoPandas、Folium、Basemap和Cartopy等。GeoPandas是一个基于Pandas的地理数据管理和分析库,可以处理地理数据绘制地理空间和进行地理数据分析。Folium是一个用于创建交互式地的库,可以轻松地添加指向地理位置的标记、多边形区域和各种层。Basemap是一个用于绘制地理的库,可以绘制各种地理特征,如陆地、湖泊、河流和国界等。Cartopy是一个专注于地绘制的库,可以生成各种类型的地,包括等值线、等高线和等距投影等。 其次,Python还支持与其他工具和库的集成,例如Matplotlib、Seaborn和Plotly等。Matplotlib是一个广泛使用的绘库,可以创建各种类型的表,包括散点、柱状和饼等。Seaborn是一个基于Matplotlib的高级数据可视化库,提供了更多的统计表和数据可视化的样式。Plotly是一个交互式表库,可以创建漂亮的地理空间可视化,并支持与Web应用程序的集成。 最后,Python地理空间数据可视化能力也得益于其丰富的社区支持和资源。用户可以利用在线教程、文档和示例代码来学习和掌握地理空间数据可视化的技术和方法。 总之,通过Python,我们可以利用其强大的地理空间数据可视化库和工具,轻松地处理、分析和可视化地理空间数据,帮助我们更好地理解和展示地理信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小Z的科研日常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值