aitken插值方法的c++代码_Rggplot2+sf 核密度空间插值可视化绘制

0932d529347660254d0f3b5bed158493.png

上篇推文我们介绍了使用Python的plotnine、Basemap包对空间kde插值结果进行了可视化绘制,当然也包括了具体的插值过程,详细内容大家可以点击下方链接查看:Python-plotnine 核密度空间插值可视化绘制 、Python-Basemap核密度空间插值可视化绘制。

本期推文我们就介绍下使用R进行核密度估计、空间插值计算以及ggplot2+sf的可视化绘制操作。涉及的主要知识点如下:

  • R-sm包计算核密度估计结果
  • R-SP包转换网格插值结果
  • R-ggplot2+sf包绘制网格插值结果
  • R-sf包实现完美“裁剪”

R-sm包计算核密度估计结果

sf包散点位置可视化

首先,我们需要读取的数据还是地图文件(jiangsu)和点数据(scatter_df),散点数据预览如下:1e2db84537313da003fbf0a1f3a4527d.png在计算核密度估计之前,我们先使用sf包进行散点的可视化绘制。首先我们使用sf包将其转换成sf地图对象,操作代码如下:

scatter_df_tro "经度", "纬度"),crs = 4326)

结果如下(部分):b94603fc59c804164f6d8cbd1733b7f3.png接下来,我们将使用sf包进行点位置的可视化绘制,代码如下:

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

#自定义颜色
my_colormap 'Spectral')))(32)
Map_point   geom_sf(data = jiangsu,fill="NA",size=.6,color="black") + 
  #coord_sf(crs = "+proj=laea +lat_0=40 +lon_0=104")+ #中国地图常用投影
  geom_sf(data = scatter_df_tro,aes(fill=PM2.5),shape=21,size=5) +
  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 01: Map point",
       subtitle = "processed map charts with geom_sf()",
       caption = "Visualization by DataCharm") +
  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),
  )

可视化结果如下:af8824656f08dd4e69eedf89acac4a57.png

sm包计算核密度估计结果

在上述可视化结果之后,我们需要根据已有的点进行核密度估计,在R中,ks、gss、KernSmooth以及sm包都可以实现核密度估计操作,在考虑定制化设置上,我们最终选择sm包进行空间核密度计算,具体代码如下:

point_dens                        display= "image", ngrid=400,
                        ylim=st_bbox(jiangsu)[c(2,4)],
                        xlim=st_bbox(jiangsu)[c(1,3)])

library(sp)

Density_result$eval.points[,1], 
                                          y=point_dens$eval.points[,2]))

Density_result$estimate, 
                                                                  length(point_dens$estimate))))
#准换成df格式
df_densityhead(df_density)

结果如下(部分):4a1459394b6d2024f71f72e72846cc25.png知识点:

  1. sm.density()根据散点经纬度计算核密度估计结果
point_dens                        display= "image", ngrid=400,
                        ylim=st_bbox(jiangsu)[c(2,4)],
                        xlim=st_bbox(jiangsu)[c(1,3)])

其中:582aa1ec699983ba8130cc8dfd01fb0b.png2. sp包SpatialPoints、SpatialPixelsDataFrame方法将插值结果转网格再转空间df数据。

  1. 使用data.frame()将结果转成data.frame()类型便于ggplot2和sf包绘制。

R-ggplot2+sf包绘制网格插值结果

接下来,我们将上方的核密度估计结果进行可视化绘制,首先,我们绘制插值的网格结果:

#自定义颜色
my_colormap 'Spectral')))(32)
Map_point_kde_nomask   geom_sf(data = jiangsu,fill="NA",size=.8,color="black") + 
  geom_tile(data = df_density,aes(x=x,y=y,fill=kde_value))+
  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 01: Map kde nomask",
       subtitle = "processed map charts with geom_title()",
       caption = "Visualization by DataCharm") +
  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 = 5)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
        plot.caption = element_markdown(face = 'bold',size = 12),
  )

可视化结果如下:e766855daec8291ed3cd03d8d9574e95.png

可以看到,还是出现了和我们使用Python绘制的结果一样,都是没有对感兴趣区域(地图文件)进行裁剪出来,接下里我们使用sf包进行 “裁剪” 操作。

R-sf包实现完美“裁剪”

st_intersection() 裁剪操作

sf包提供了多种方便、灵活、简单的空间数据操作函数(抽时间可以系统进行主要函数的详细讲解),在这里,我们就使用了sf::st_intersection() 将我们感兴趣的区域进行获取,首先,我们将kde插值结果转换成sf对象类型,代码如下:

df_density_df "x", "y"),crs = 4326)
head(df_density_df)

结果如下(部分):7dafb32008ab40798ad43edd33f6450d.png再结合之前的地图文件(jiangsu,sf包读取的geojson文件格式),使用*st_intersection()*方法即可,如下:

mask_result 

geom_sf()裁剪结果可视化绘制

在获取裁剪的结果之后,我们就可以使用geom_sf()方法进行绘制了,这里注意:aes(color=kde_value)操作,具体代码如下:

Map_point_kde   geom_sf(data = mask_result,aes(color=kde_value)) +
  geom_sf(data = jiangsu,fill="NA",size=.5,color="gray40") +
  scale_color_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 01: Map point kde",
       subtitle = "processed map charts with geom_sf()",
       caption = "Visualization by DataCharm") +
  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),
  )

最终的可视化结果如下:0342ab85602917491b8bf6d505316bd4.png

总结

这一篇推文我们详细介绍了R核密度估计、空间网格数据以及裁剪之后的可视化绘制结果,我们可以看出,R在操作空间数据上较Python 还是灵活下,特别是功能较为强大的sf包,此外,R在绘制地图可视化作品时,其元素添加也较为丰富(比例尺、指北针等)。接下里,我将继续使用RPython(两个版本), 探索空间插值应用较为广泛的方法及对应的可视化结果,感受空间可视化带给我们的视觉盛宴!希望小伙伴们能够喜欢82e5f31809a5c3bd39cbb7e647f6ef37.png82e5f31809a5c3bd39cbb7e647f6ef37.png

推荐阅读

  • 七夕福利赠送

  • Python-Basemap核密度空间插值可视化绘制

  • Python-plotnine 核密度空间插值可视化绘制

  • R-Python 基础图表绘制-核密度估计图

  • Python-geopandas 中国地图绘制

  • R-ggplot2 标准中国地图制作

  • Excel 图表资源分享2-按钮联动绘图

  • Excel 绘制学术图表不知道设置颜色?一次性免费分享18种颜色主题

  • Excel-ghibli包颜色主题免费分享

  • PDF文件信息不会提取怎么办??别急!Python帮你解决

  • R-tmap 绘制带指北针和比例尺的空间地图

  • R-ggplot2 学术散点图绘制

  • Python-matplotlib 学术散点图 EE 统计及绘制

  • Python-joypy和 R-ggridges 峰峦图制作

  • 绘图文本重叠怎么办?R-ggrepel和Python-adjustText 帮你解决

  • Python-matplotlib 商业图表绘制04

  • Python-matplotlib 商业图表绘制01

d6ecb3b3e19986b634c41de02abdc285.png

好文!必须在看
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值