作者:寧海濤
來源:DataCharm
nc數據文件的R包讀取在R中讀取nc文件,我們首選ncdf4包,其使用參考網址如下:https://rdrr.io/cran/ncdf4/。這裡簡單介紹下主要的函數:
print.ncdf4: Print Information About a netCDF File(輸出nc文件基本信息)。nc_open(): Open a netCDF File(打開nc文件)。ncvar_get(): Read data from a netCDF file(讀取nc文件中變量數據)。ncatt_get(): Get attribute from netCDF file(獲取ncw文件屬性)。對應nc文件,常用的使用方法就是以上4中,數據獲取後(由於是規整的數據格式)可以像其他數據一樣進行處理和變換。更多詳細內容可參考上面給出的網站。nc數據的可視化繪製由於我們使用的是ggplot2進行繪製,所以我們直接使用raster包進行nc文件的讀取(其實也是調用ncdf4包進行處理),數據我們就使用昨天分享數據的數據:數據(代碼)分享 | 全球生物氣候指標數據集。具體代碼如下:
library(raster)
library(sf)
library(tidyverse)
library(RColorBrewer)
library(ggtext)
library(showtext)
library(hrbrthemes)
nc01 <- "BIO34_CMCC_85_2040_79.nc"
dset01 <- raster(nc01)結果如下:
ggplot2可視化繪製在使用ggplot2進行繪製之前,我們需要將raster包讀取的結果轉換成data.frame,方便繪圖:
dset01_df <- as.data.frame(dset01,xy = TRUE)
head(dset01_df)
可以看到數據還是有很多NA值的,這裡我們選擇將NA值刪除,當然,你也可以不刪除處理,代碼如下(包含重命名):dset01_df <- dplyr::rename(dset01_df,long = x,lat=y)
dset01_df_nona <- dset01_df %>% filter(!is.na(Potential.Evapotranspiration.Hargreaves))結果如下:接下來,我們就可以進行可視化設置了,這裡直接給出繪圖代碼哈:
#自定義顏色
my_colormap <- colorRampPalette(rev(brewer.pal(11,'Spectral')))(32)
map <- ggplot() +
geom_tile(data = dset01_df_nona, aes(x=long, y=lat, fill=Potential.Evapotranspiration.Hargreaves)) +
borders(colour = "black",alpha=.8,size=.1) +
#borders(colour = "black",fill="gray50",alpha=.4) +
scale_fill_gradientn(colours = my_colormap,name="PEH(mm)") +
labs(
title = "Example of <span style='color:#D20F26'>BIO34 - Potential Evapotranspiration (PET, mm/y)</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.margin = grid::unit(c(0,0,0,0), "mm"), #去除圖片保存的留白問題
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),
)可視化結果如下:
當然我們也可以更換顏色條顏色,可視化效果如下:
此外,我們還可以設置不同投影的可視化繪製效果:結果如下:
注意:這裡我們通過如下代碼設置了顏色柱(colorbar)的長寬等屬性:legend.text = element_text(color = "black",
size = 11),
legend.key.width = unit(5.2, "mm"),
legend.key.height = unit(12, "mm")倒是要想獲取數據資料分享中的可視化效果,我們需使用sf包對數據進行投影轉換及使用*geom_sf()*進行轉換結果的可視化繪製,代碼如下:
df_sf <- sf::st_as_sf(dset01_df, coords = c("long", "lat"), crs = 4326) %>%
sf::st_transform(crs = "+proj=robin")
jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000"))
ggplot() +
#borders(colour = "black",fill="gray50",alpha=.5,) +
geom_sf(data = df_sf_nona,aes(color=Potential.Evapotranspiration.Hargreaves),size=.08) +
borders(colour = "black",alpha=1,size=.1) +
scale_color_gradientn(colors = jet.colors(7),name="PEH(mm)")+
#添加經緯度線
scale_x_continuous(breaks = seq(-180, 180, by = 30)) +
scale_y_continuous(breaks = c(seq(-80, 80, by = 20), 85)) +
labs(x="",y="",
title = "Example of <span style='color:#D20F26'>BIO34-Potential Evapotranspiration (PET, mm/y)</span>",
subtitle = "processed map charts with <span style='color:#1A73E8'>geom_sf()</span>",
caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") +
theme_ipsum(base_family = "Roboto Condensed") +
theme(#plot.margin = grid::unit(c(0,0,0,0), "mm"), #去除圖片保存的留白問題
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),
#設置刻度大小
axis.title = element_text(size=8),
#設置圖例屬性
legend.position = "bottom",
legend.text = element_text(
color = "black",
size = 10),
legend.key.width = unit(15, "mm"),
legend.key.height = unit(4, "mm")
)最終的可視化效果如下:
有小夥伴可能會說「沒有灰色的背景」,這裡說下,我們在不刪除NA值的情況下繪製就會有對應的灰色背景值,刪除NA值後則沒有。我們也放出沒有刪除NA值的可視化結果:
總結這一期我們還是分享了可視化繪製技巧,希望對大家繪製空間nc網格數據有所幫助,而Python 處理及可視化的繪製操作打算和空間插值的放在一起,嘗試使用視頻的形式分享給大家~
數據森麟公眾號的交流群已經建立,許多小夥伴已經加入其中,感謝大家的支持。大家可以在群裡交流關於數據分析&數據挖掘的相關內容,還沒有加入的小夥伴可以掃描下方管理員二維碼,進群前一定要關注公眾號奧,關注後讓管理員幫忙拉進群,期待大家的加入。
管理員二維碼: