• 地图可视化绘制 | R-ggplot2 NC地图文件可视化


    在推出两期数据分享之后,获取数据的小伙伴们也知道,数据格式都是NetCDF(nc) 格式网格数据,虽然我在推文分享中说明使用Python、R或者GIS类软件都是可以进行 处理和可视化绘制的,但是,还是有小伙伴咨询使用编程软件Python或者R处理nc数据,正好也想分享一期关于nc网格数据的可视化绘制过程,这里我们使用R包进行nc数据的处理(Python处理较为简单,将放在空间插值系列的资料中,该部分正在加快进程中哦~~),主要涉及的知识点如下:

    • nc数据文件的R包读取

    • nc数据的可视化绘制

    • 所有完整代码都已整理之我们的线上课程,有需要的同学+v yidianshuyulove 咨询

    nc数据文件的R包读取

    在R中读取nc文件,我们首选ncdf4包,其使用参考网址如下: *https://rdrr.io/cran/ncdf4/*。这里简单介绍下主要的函数:

    1. print.ncdf4: Print Information About a netCDF File(输出nc文件基本信息)。

    2. nc_open(): Open a netCDF File(打开nc文件)。

    3. ncvar_get(): Read data from a netCDF file(读取nc文件中变量数据)。

    4. ncatt_get(): Get attribute from netCDF file(获取ncw文件属性)。 对应nc文件,常用的使用方法就是以上4中,数据获取后(由于是规整的数据格式)可以像其他数据一样进行处理和变换。更多详细内容可参考上面给出的网站。

    nc数据的可视化绘制

    由于我们使用的是ggplot2进行绘制,所以我们直接使用raster包进行nc文件的读取(其实也是调用ncdf4包进行处理),数据我们就使用昨天分享数据的数据:数据(代码)分享 | 全球生物气候指标数据集。具体代码如下:

    1. library(raster)
    2. library(sf)
    3. library(tidyverse)
    4. library(RColorBrewer)
    5. library(ggtext)
    6. library(showtext)
    7. library(hrbrthemes)
    8. nc01 <- "BIO34_CMCC_85_2040_79.nc"
    9. dset01 <- raster(nc01)

    结果如下:

    ggplot2可视化绘制

    在使用ggplot2进行绘制之前,我们需要将raster包读取的结果转换成data.frame,方便绘图:

    1. dset01_df <as.data.frame(dset01,xy = TRUE)
    2. head(dset01_df)

    可以看到数据还是有很多NA值的,这里我们选择将NA值删除,当然,你也可以不删除处理,代码如下(包含重命名):

    1. dset01_df  <-  dplyr::rename(dset01_df,long = x,lat=y)
    2. dset01_df_nona <- dset01_df %>% filter(!is.na(Potential.Evapotranspiration.Hargreaves))

    结果如下:

    接下来,我们就可以进行可视化设置了,这里直接给出绘图代码哈:

    1. #自定义颜色
    2. my_colormap <- colorRampPalette(rev(brewer.pal(11,'Spectral')))(32)
    3. map <- ggplot() + 
    4.   geom_tile(data = dset01_df_nona, aes(x=long, y=lat, fill=Potential.Evapotranspiration.Hargreaves)) +
    5.   borders(colour = "black",alpha=.8,size=.1+
    6.   #borders(colour = "black",fill="gray50",alpha=.4+
    7.   scale_fill_gradientn(colours = my_colormap,name="PEH(mm)"+
    8.   labs(
    9.        title = "Example of BIO34 - Potential Evapotranspiration (PET, mm/y)",
    10.        subtitle = "processed map charts with geom_tile()",
    11.        caption = "Visualization by DataCharm"+
    12.   theme_ipsum(base_family = "Roboto Condensed"+
    13.   theme(#plot.margin = grid::unit(c(0,0,0,0), "mm"), #去除图片保存的留白问题
    14.         plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
    15.                              size = 20, margin = margin(t = 1, b = 12)),
    16.         plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
    17.         plot.caption = element_markdown(face = 'bold',size = 12),
    18.   )

    可视化结果如下:

    当然我们也可以更换颜色条颜色,可视化效果如下:

    此外,我们还可以设置不同投影的可视化绘制效果:结果如下:

    注意:这里我们通过如下代码设置了颜色柱(colorbar)的长宽等属性

    1. legend.text = element_text(color = "black",
    2.                           size = 11),
    3. legend.key.width = unit(5.2"mm"),
    4. legend.key.height = unit(12"mm")

    倒是要想获取数据资料分享中的可视化效果,我们需使用sf包对数据进行投影转换及使用*geom_sf()*进行转换结果的可视化绘制,代码如下:

    1. df_sf <- sf::st_as_sf(dset01_df, coords = c("long""lat"), crs = 4326) %>%
    2.          sf::st_transform(crs = "+proj=robin")
    3.          
    4. jet.colors <- colorRampPalette(c("#00007F""blue""#007FFF""cyan""#7FFF7F""yellow""#FF7F00""red""#7F0000"))
    5. ggplot() + 
    6.   #borders(colour = "black",fill="gray50",alpha=.5,) +
    7.   geom_sf(data = df_sf_nona,aes(color=Potential.Evapotranspiration.Hargreaves),size=.08+
    8.   borders(colour = "black",alpha=1,size=.1+
    9.   scale_color_gradientn(colors = jet.colors(7),name="PEH(mm)")+
    10.   #添加经纬度线
    11.   scale_x_continuous(breaks = seq(-180180by = 30)) +
    12.   scale_y_continuous(breaks = c(seq(-8080by = 20), 85)) + 
    13.   labs(x="",y="",
    14.        title = "Example of BIO34-Potential Evapotranspiration (PET, mm/y)",
    15.        subtitle = "processed map charts with geom_sf()",
    16.        caption = "Visualization by DataCharm"+
    17.   theme_ipsum(base_family = "Roboto Condensed"+
    18.   theme(#plot.margin = grid::unit(c(0,0,0,0), "mm"), #去除图片保存的留白问题
    19.         plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
    20.                              size = 20, margin = margin(t = 1, b = 12)),
    21.         plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
    22.         plot.caption = element_markdown(face = 'bold',size = 12),
    23.         #设置刻度大小
    24.         axis.title = element_text(size=8),
    25.         #设置图例属性
    26.         legend.position = "bottom",
    27.         legend.text = element_text(
    28.                                     color = "black",
    29.                                     size = 10),
    30.         legend.key.width = unit(15"mm"),
    31.         legend.key.height = unit(4"mm")
    32.   )

    最终的可视化效果如下:

    有小伙伴可能会说“没有灰色的背景”,这里说下以下,我们在不删除NA值的情况下绘制就会有对应的灰色背景值,删除NA值后则没有。我们也放出没有删除NA值的可视化结果:

    总结

    这一期我们还是分享了可视化绘制技巧,希望对大家绘制空间nc网格数据有所帮助,而Python 处理及可视化的绘制操作打算和空间插值的放在一起,尝试使用视频的形式分享给大家~

  • 相关阅读:
    在线教育系统,引领了全新的教学模式
    阿里P8最新内部疯传的 2022年【失传资料】Java面试总结手册
    五个做原型的好处和意义
    基于Java web的电动车销售平台 毕业设计-附源码201524
    算法基础之差分和前缀和
    推进智慧工地建设,智慧工地是什么?建筑工地人必看!
    筒仓料位监测|敢不敢对“精度”下狠手!您家筒仓料位测得准吗?
    【React】React全家桶(七)路由简介与React Router 5
    element-plus 设置 el-date-picker 弹出框位置
    Nwafu-OJ-1485 Problem o C语言实习题八——单链表结点的阶乘和
  • 原文地址:https://blog.csdn.net/qq_40483688/article/details/136380690