地圖可視化繪製 | R-ggplot2 NC地圖文件可視化

2021-02-18 數據森麟


作者:寧海濤

來源: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 處理及可視化的繪製操作打算和空間插值的放在一起,嘗試使用視頻的形式分享給大家~


數據森麟公眾號的交流群已經建立,許多小夥伴已經加入其中,感謝大家的支持。大家可以在群裡交流關於數據分析&數據挖掘的相關內容,還沒有加入的小夥伴可以掃描下方管理員二維碼,進群前一定要關注公眾號奧,關注後讓管理員幫忙拉進群,期待大家的加入。

管理員二維碼:


相關焦點

  • 繪圖技巧 | 「變形」地圖可視化繪製方法
    今天的推文給大家介紹一個可以繪製」變形「地圖的可視化包-R-cartogram包,改包可以使繪製地圖時某些區域的幾何形狀進行扭曲變化,可以更好的傳遞地圖表達的信息。cartogram包實例演示這一部分我們使用的地圖數據還是美國數據,來自於繪製美國標準地圖的albersusa包,該包還包括人口數據POP,我們使用這兩個數據對cartogram包進行演示。首先我們直接映射人口數據(不做數據變形)。
  • 手把手教你使用ggplot2繪製中國地圖
    自從用了ggplot2包,越來越覺得其博大精深,通過圖層的概念可以繪製豐富的可視化圖形,如常見的散點圖、直方圖、條形圖、折線圖等。今天就教大家如何使用ggplot2實現地圖的繪製,以及如何在地圖中加入氣泡圖和條形圖。本文所使用的數據來自於經管之家moonstone作者提供的流行病學樣本數據。有關地理信息數據可至文後的下載連結。
  • R語言可以這麼玩 | 繪製地圖與地點數據可視化
    這次,我們用R來畫地圖吧,利用可視化工具,我們更能輕鬆地得出結論哦~R語言裡的ggmap包是繪製地圖的利器。在確保電腦可以上外網的情況下(為了保證進入google地圖的URL),ggmap包幫助我們輕鬆下載google map,再加上和ggplot2製圖包的疊加,可以輕鬆、方便地繪製可視化地圖。
  • 工具分享 | linemap-快速繪製山巒地圖的R可視化包介紹
    上一次介紹了Python繪製svg的優秀可視化庫Pygal,今天我們介紹一下一個優秀的R地圖可視化繪製包-linemap包,顧名思義,該包是是為了繪製由線組成的地圖,其官網如下:https://github.com/rCarto/linemap。
  • R-ggplot2 標準中國地圖製作
    由於基礎圖表繪製系列推文還在加緊準備中,所以這期推文還是對一些感興趣的圖表進行繪製,這期涉及空間圖表繪製,主要涉及知識點如下:ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):
  • 使用Python和R繪製數據地圖的十七個經典案例
    然後,創建地圖本身就像創建任何其他ggplot可視化一樣熟悉。 這裡,還有一些更好的資源用於使用地圖、mapsdata和ggplot2: 在R中繪製地圖 http://eriqande.github.io/rep-res-web/lectures/making-maps-with-R.html 使用ggplot2軟體包在R中繪製地圖 http://zevross.com/blog/2014/
  • R筆記7:ggplot繪製商務圖表--地圖上的迷你柱形圖
    本例用ggplot來繪製商業圖表仿的第025號案例,地圖上的迷你柱形圖。
  • R-rayshader包: 一個震撼的交互型3D可視化
    # 安裝rayshader包install.packages("remote")remotes::install_github("tylermorganwall/rayshader")library(rayshader)library(ggplot2)# 查看數據格式head(diamonds)# 繪製二維密度圖
  • 實用技術 | 如何用R繪製並填充相對正確的世界地圖
    ggplot() + geom_sf(data = worlddata, aes(fill = estimate), colour = "#525252",size=0.3)+ #繪製世界地圖並按照estimate欄位中的數據上色 geom_sf(data = SCSislands, colour = "#525252")+ #繪製南海諸島
  • 在Python中使用ggplot2風格及語法: plotnine與ggplot|可視化系列05
    Hadley Wickham編寫的ggplot2 在R語言中聲名遠揚,使得統計數據可視化能力成為R語言的一大優勢(這位大神還寫了dplyr、tidyr等影響深遠的R包)。本文用這兩個庫實踐日常可視化的需求,包括繪製基礎圖形和分面主題等,通過對比使用plotnine和ggplot兩個庫,去理解圖形語法的理念。
  • Python-plotnine 核密度空間插值可視化繪製
    實現了中國地圖的繪製,也相應分享了繪圖數據(數據分享連結失效,本期會補上連結,文末有獲取方式)。讀取geojson 地圖文件、散點數據及基礎繪圖代碼如下:散點數據預覽如下:plotnine包可視化展示這裡的可視化繪製,我們直接使用語法和ggplot2相似的python包:plotnine,感興趣的小夥伴可以自行搜索。
  • 用R在地圖上繪製網絡圖的三種方法
    R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)ComplexHeatmap |理解繪圖邏輯繪製熱圖R語言可視化學習筆記之ggridges包  ggplot2學習筆記之圖形排列地理網絡圖與傳統的網絡圖不同,當引用地理位置進行節點網絡可視化時,
  • 使用REmap繪製中國地圖
    上次我們介紹了使用ggplot2繪製中國熱力地圖,需要溫習的同學可以點擊以下連結 使用ggplot2繪製中國地圖  。
  • ​數據可視化 | 6個基本可視化Python庫
    使用Matplotlib庫繪製實例:import numpy as npimport matplotlib.pyplot as pltimport mpl_toolkits.mplot3da,b = np.mgrid[-2:2:20j,-2:2:20j]c=a*np.exp(-a**4-b**2)
  • 數據可視化工具大集合
    Linkurious - 一款基於 Sigma.js 的能加快圖形可視化和交互式應用的開發速度的工具箱 Sigma.js - 致力於圖形繪製的 JavaScript 庫VivaGraph - 針對 JavaScript 的圖形繪製庫地圖(Maps)CartoDB - CartoDB 是一款開源工具並且其允許對網頁上的地理數據進行存儲和可視化
  • 三種方法在地圖上繪製網絡圖
    最近為了繪製幾幅簡單地圖,查閱了一些資料,看到了Markus konrad的帖子,非常贊。其中他的部分思路對於我們學習可視化很有幫助。可視化#生成圖形結構g <- graph_from_data_frame(edges, directed = FALSE, vertices = nodes)   再額外定義四列用來繪製節點的起始位置edges_for_plot <- edges%>%inner_join
  • 【功能預告】地圖可視化之興趣點輪廓線可視化,最細顆粒度的自動化...
    採集到手的json文件,並非最終可用的geojson的地圖數據包格式,需轉換,先轉Excel表格,直觀配置所需信息。 自定義輪廓線,用於非標準地圖元素 當前所有完成的地圖輪廓線信息,都是基於標準地圖或接口完成,但大量的未標準化的數據如局部鄉鎮的地圖輪廓。大量工作在基層的人員非常大的剛需。此時仍然使用LSV可視化交互式完成。
  • R語言數據可視化ggplot2包
    ggplot2是R語言最為強大的作圖軟體包,有著自成一派的可視化理念,數據可視化是數據分析的重要一步,讓我們通過由淺入深的掌握數據可視化的精髓。
  • 一文讀懂ggplot2數據可視化
    coordinate system: 數據可視化,主要是在二維平面上表示數據的關係,所用坐標系一般為平面直角坐標,有時會用到極坐標、地圖投影等。ggplot2軟體默認使用平面直角坐標。geoms: 包括geoms_開頭的各種對象,用來繪製各種基本組件,包括點、線、面、多邊形、柱狀圖、箱線圖等。
  • Python-Plotnine包: 類別插值地圖
    今天這篇推文,我們繼續空間數據可視化的最後一個系列-類別插值(categorical-spatial-interpolation) 可視化繪製的推文教程,這期我們使用Python進行繪製,涉及的知識點如下:sklearn.KNeighborsClassifier()機器學習應用