绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化

这篇具有很好参考价值的文章主要介绍了绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇文章,我们使用了Python 自定义IDW插值函数进行了IDW空间插值及可视化的plotnine、Basemap的绘制方法,本期推文我们将使用R-gstat进行IDW插值计算和使用ggplot2进行可视化绘制,主要涉及的知识点如下:

  • R-gstat包IDW插值计算

  • R-ggplot2 IDW插值结果可视化绘制

R-gstat包IDW插值计算

得益于优秀且丰富的R语言第三方包,我们可以直接使用空间统计计算的R-gstat包实现包括IDW在内的多种插值方法,使用R-sf包完美绘制空间可视化绘制。还是老样子,我们对所需数据(散点值+地图数据)的基本情况进行预览,结果如下:

绘图数据预览

  • 散点情况(scatter_df)

    绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化,数据可视化,r语言,开发语言,数据可视化,python
  • 地图文件(jiangsu)

    绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化,数据可视化,r语言,开发语言,数据可视化,python

    散点在地图上的可视化结果如下(之前推文已有过操作方法,不明白的小伙伴可以参考下):

    绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化,数据可视化,r语言,开发语言,数据可视化,python

gstat-IDW计算

接下来,我们使用gstat包进行IDW计算,在计算之前,我们需使用sp包对数据进行相关处理,具体操作如下:

将数据准换成空间数据格式:

sp::coordinates(scatter_df) = ~经度+纬度

数据格式准换如下:

绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化,数据可视化,r语言,开发语言,数据可视化,python

「制作网格数据」: 更具地图文件的经纬度范围信息,我们进行网格(grid)的构建(我们需要插值的区域),代码如下:

sf::st_bbox(jiangsu)
#生成400*400的网格
grid <- expand.grid(x=seq(from = st_bbox(jiangsu)[1],to = st_bbox(jiangsu)[3],length.out = 400),
                    y=seq(from = st_bbox(jiangsu)[2],to = st_bbox(jiangsu)[4],length.out = 400))

这样就可以完成了400x400的网格点构建,接下来要将构建的网格点转换成空间数据格式,还是使用sp包操作,代码如下:

sp::coordinates(grid) <- ~x+y
sp::gridded(grid) <- TRUE

以上操作我们就完成了gstat包所需的所有数据处理操作。

「IDW 插值操作」

由于有现成的函数可以调用,这里我们直接使用,代码如下:

idw <- idw(formula = PM2.5 ~ 1,locations = scatter_df, newdata=grid)

解释如下:

  • formula = PM2.5~ 1 为固定样式,用于需要进行插值的纬度数据。

  • locations = scatter_df 为sp包处理过的样例点位置信息。

  • newdata=grid 为需要插值的网格大小,sp对象。 由于计算的idw结果较多(400*400),这里将其转换成df数据类型,同时对列进行重命名,也为以后的绘图提供方便,转换代码如下:

idw_output <- as.data.frame(idw)
names(idw_output)[1:3]<-c("long","lat","IDW_Result")

结果如下(部分):

绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化,数据可视化,r语言,开发语言,数据可视化,python

ggplot2 可视化IDW插值结果

经过上面的数据规整,我们直接可以进行可视化操作,代码如下:

library(sf)
library(tidyverse)
library(ggspatial)
library(RColorBrewer)
library(ggtext)
library(hrbrthemes)

#自定义颜色
my_colormap <- colorRampPalette(rev(brewer.pal(11,'Spectral')))(32)
IDW_Map_title <- ggplot() + 
  geom_tile(data = idw_output,aes(x=long,y=lat,fill=IDW_Result)) +
  geom_sf(data = jiangsu,fill="NA",size=.5,color="gray40") +
  geom_sf(data = scatter_df_tro,aes(fill=PM2.5),shape=21,size=4,show.legend = FALSE)+
  scale_fill_gradientn(colours = my_colormap)+
  annotation_scale(location = "bl") +
      # spatial-aware automagic north arrow
       annotation_north_arrow(location = "tr", which_north = "false",
                             style = north_arrow_fancy_orienteering) +
  labs(
       title = "Map Charts in R Exercise 02: <span style='color:#D20F26'>Map IDW Interpolation</span>",
       subtitle = "processed map charts with <span style='color:#1A73E8'>geom_tile()</span>",
       caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") +
  theme_ipsum(base_family = "Roboto Condensed") +
  theme(
        plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                             size = 20, margin = margin(t = 1, b = 12)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
        plot.caption = element_markdown(face = 'bold',size = 12),
  )

注意:这里我们将散点绘制在插值结果之上,也为了查看插值的效果,最终的可视化结果如下:

绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化,数据可视化,r语言,开发语言,数据可视化,python

sf包裁剪操作

上面的可视化结果只是将网格插值结果全部绘制出来,没有将目标区域进行单独绘制(地图文件),这里使用sf::st_intersection() 函数进行实现“裁剪”操作,这里不再赘述,不明白的可以查看我之前的推文。最终的可视化结果如下:

绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化,数据可视化,r语言,开发语言,数据可视化,python

注意: 小伙伴们可能也发现了,这样裁剪的结果不是完全的按照地图文件进行裁剪的,会有部分“溢出”,特别是在绘制较大范围的空间图表的时候,这里可以转换成栅格数据,然后再使用*mask()*方法也是可以操作的,具体其他的,后面我会专门出一期推文介绍这两种"裁剪"操作的不同,这里先不做介绍。

总结

继上期我们推出Python 版本的IDW 空间插值之后,本期我们又推出了R版本的,大家可以对比下两种插值的结果(可能会存在些许的不同)。还是那句话,在绘制空间图表时,R因其完整的绘图体系及优秀的第三方包,可以较好的完成绘图需求(各种空间绘图元素的添加),但Python因其简单好学,也具有一定优势,大家可以选择适合自己的方法进行学习,至于对比两种语言绘图不同,就交给小编来做吧。下期,我们继续空间插值(克里金:Kriging)的计算及可视化绘制,还是Python和R的两个版本哦,大家敬请期待!文章来源地址https://www.toymoban.com/news/detail-821633.html

到了这里,关于绘图提高篇 | R-gstat-ggplot2 IDW计算及空间插值可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 梳理系统学习R语言1-R语言实战-使用ggplot进行高阶绘图

    以下为书中代码,会添加一些理解

    2024年02月11日
    浏览(9)
  • 基于 Python 的地理空间绘图指南(以 gma 空间绘图功能为例)

    基于 Python 的地理空间绘图指南(以 gma 空间绘图功能为例)

    gma 是一个基于 Python 的地理、气象数据快速处理和数据分析函数包(Geographic and Meteorological Analysis,gma)。gma 网站:地理与气象分析库。 气候气象(例如 SPEI、SPI、ET0 等)。 遥感指数(例如 NDVI、EVI、TVDI 等)。 数学运算(例如 数据平滑、评估、滤波、拉伸、增强变换等)

    2023年04月09日
    浏览(8)
  • Oracle 如何提高空间使用率?

    Oracle 如何提高空间使用率?

    oracle尽量保证一行的数据能够放在同一个数据块当中,有的时候行会发生行迁移和行链接。 行链接 :有一个列的字段是大对象(long,longlong)一行占的数据一整个块都放不下,则oracle会把这行的数据分为两部分或多部份,存放到不同的数据块,这种现象叫做行链接。 行链接

    2024年02月21日
    浏览(9)
  • 如何提高代码效率——时间复杂度与空间复杂度——【C语言】

    如何提高代码效率——时间复杂度与空间复杂度——【C语言】

    当我们面对一个问题时,会有许多种解题思路。我们现在的计算机技术已经达到非常先进的地步,所以当我们用不同的方法对待问题时,时间差异不会很明显,内存差异我们一般在平常小问题时感受不到,所以我们不会去纠结程序的优化过程。 但是在以后的生活中,程序内容

    2024年02月14日
    浏览(8)
  • YOLOv7改进ASFF系列:最新结合Adaptively Spatial Feature Fusion自适应空间特征融合结构(内附代码),提高特征尺度不变性

    💡该教程包含大量的原创首发改进方式, 所有文章都是原创首发改进内容🚀 降低改进难度,改进点包含最新最全的Backbone部分、Neck部分、Head部分、注意力机制部分、自注意力机制部分等完整教程🚀 💡本篇文章基于 基于 YOLOv7、YOLOv7-tiny、YOLOv5 等网络 结合 ASFF 自适应空间特征

    2024年02月06日
    浏览(116)
  • 数据集成与云计算:如何利用云计算提高数据整合效率

    数据集成是指将来自不同来源的数据进行整合、清洗、转换、加工等操作,以实现数据的一致性、一直性和完整性,从而为数据分析、报表和决策提供支持。随着数据量的增加,数据集成的复杂性和挑战也不断增加。传统的数据集成方法和技术已经不能满足现实中复杂、大规

    2024年02月21日
    浏览(11)
  • 云计算的自动化:如何提高效率

    云计算是一种基于互联网的计算资源分配和管理模式,它允许用户在需要时轻松获取计算资源,并根据需求支付相应的费用。随着云计算的发展,各种云服务也不断增多,例如基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。这些服务为企业和个人提供了更高效、灵

    2024年02月19日
    浏览(17)
  • 【计算机图形学基础教程】MFC基本绘图函数2

    【计算机图形学基础教程】MFC基本绘图函数2

    CGdiObject类:GDI绘图工具的基类 CBitmap类:封装了GDI画刷,可以选作设备上下文的当前画刷,用于填充图形的内部 CFont类:封装了GDI字体,可以选作设备上下文的当前字体 CPalette类:封装了GDI调色板,提供应用程序和显示器之间的颜色接口 CPen类:封装了GDI画笔,可以选作设备

    2024年02月03日
    浏览(18)
  • 如何使用云计算来提高公司安全性

    作者:禅与计算机程序设计艺术 云计算是一种在线服务提供商,提供的服务包含虚拟机、存储、数据库等计算、存储、网络资源,可以在互联网上按需使用,可以按使用量付费或者按带宽收费。相对于传统的数据中心部署的方式,云计算最大的优点是灵活性和弹性成本低廉,

    2024年02月05日
    浏览(15)
  • 云计算实验如何结合AI来提高效率!

    云计算实验如何结合AI来提高效率!

        随着AI助手的流行,我们现在无论是学习还是工作都会带着一个他/她,如何让AI助手提高我们的工作效率是我们需要进化的方向。下面结合“云计算实验”来分享一下如何让AI帮助我们学得更快学得更好。 比如在学习RockyLinux9.2中的nmcli命令时,我们可以这样学习: 1、输入

    2024年02月05日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包