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

2021-02-26 數據森麟


作者:寧海濤

來源: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-cartography 藝術地圖繪製
    本期推文我們介紹一個可以繪製頗具「藝術」風格地圖的可視化包-cartography,主要涉及的內容如下:R-cartography 簡介說到cartography包,用Python繪圖的小夥伴可能會想到cartopy(Basemap的下一代地圖可視化繪製包),下面就簡單介紹下
  • 三種可視化方法,手把手教你用R繪製地圖網絡圖!
    下面這篇博客將使用R中的igraph、ggplot2或ggraph包來介紹三種在地圖上可視化網絡圖的方法。在對地理位置以及位置的連接關係進行可視化時,還可以在圖中展示一些屬性。當我們對節點(nodes)為地理位置的網絡圖進行可視化時,比較有效的做法是將這些節點繪製在地圖上並畫出它們之間的連接關係,因為這樣我們可以直接看到網絡圖中節點的地理分布及其連接關係。
  • R語言可以這麼玩 | 繪製地圖與地點數據可視化
    這次,我們用R來畫地圖吧,利用可視化工具,我們更能輕鬆地得出結論哦~R語言裡的ggmap包是繪製地圖的利器。在確保電腦可以上外網的情況下(為了保證進入google地圖的URL),ggmap包幫助我們輕鬆下載google map,再加上和ggplot2製圖包的疊加,可以輕鬆、方便地繪製可視化地圖。
  • R-ggplot2 標準中國地圖製作
    ggplot2 + sf 中國標準地圖繪製cowplot 包實現地圖子圖插入ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):其實我很早就想試著用R進行此類圖表的繪製了,但由於強大的Arcgis和繪圖進度等原因
  • R可視化:圖片為背景的氣泡地圖
    bubble map一般是通過導入.shp的地圖數據來完成的,但很多情況下,標準的地圖數據是很難獲得的,只有圖片形式的的圖片,這時候為了繪製bubble map 就需要導入外部圖片為ggplot的背景。下面以澳大利亞圖片地圖為例,展示這種情況下bubble map的畫法,因為是網絡圖受版權保護,在實際操作中可以選擇更清晰高質量的背景圖。
  • 工具分享 | linemap-快速繪製山巒地圖的R可視化包介紹
    上一次介紹了Python繪製svg的優秀可視化庫Pygal,今天我們介紹一下一個優秀的R地圖可視化繪製包-linemap包,顧名思義,該包是是為了繪製由線組成的地圖,其官網如下:https://github.com/rCarto/linemap。
  • 手把手教你使用ggplot2繪製中國地圖
    自從用了ggplot2包,越來越覺得其博大精深,通過圖層的概念可以繪製豐富的可視化圖形,如常見的散點圖、直方圖、條形圖、折線圖等。
  • R可視乎 | 雙變量映射地圖繪製
    本期推文主要涉及的內容如下:雙變量映射地圖(Bivariate Choropleth Map)簡介R-ggplot2+biscale 輕鬆繪製雙變量映射地圖Bivariate Choropleth Map在繪製地圖時,我們常常使用單一變量進行映射處理,當然,這樣展示的結果可以很好的表現我們研究的特徵
  • 實用帖之R-ggplot2 標準中國地圖製作
    這期涉及空間圖表繪製,主要涉及知識點如下:ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):其實我很早就想試著用R進行此類圖表的繪製了,但由於強大的Arcgis和繪圖進度等原因,導致遲遲沒有進行,這期就進行此類圖表的繪製
  • 實用技術 | 如何用R繪製並填充相對正確的中國地圖
    誠然與需要付費才能使用的地理信息軟體ArcGIS相比,免費、開源的R軟體結合相對強大的tidyverse和sf等包在處理一些地理信息數據的可視化時可以不落下風,但是由於現有可供R軟體讀取的很多地圖json/shp文件都由外國作者創作,因此在涉及中國邊界的繪製過程中經常會有意無意的出現錯繪、漏繪的情況。我們曾經在《實用技術 | 如何用R繪製並填充相對正確的世界地圖》一文裡提過上述問題。
  • 用R在地圖上繪製網絡圖的三種方法
    R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)ComplexHeatmap |理解繪圖邏輯繪製熱圖R語言可視化學習筆記之ggridges包  ggplot2學習筆記之圖形排列地理網絡圖與傳統的網絡圖不同,當引用地理位置進行節點網絡可視化時,
  • Python-plotnine 核密度空間插值可視化繪製
    實現了中國地圖的繪製,也相應分享了繪圖數據(數據分享連結失效,本期會補上連結,文末有獲取方式)。讀取geojson 地圖文件、散點數據及基礎繪圖代碼如下:散點數據預覽如下:plotnine包可視化展示這裡的可視化繪製,我們直接使用語法和ggplot2相似的python包:plotnine,感興趣的小夥伴可以自行搜索。
  • Excel 2016 三步繪製可視化地圖
    大家好,今天主要介紹一下如何使用Excel繪製地圖。Excel繪製地圖主要使用PowerMap模塊。
  • 朝花夕拾(二)|《R時代,你要怎樣畫地圖》
    • 邱怡軒:用R軟體繪製中國分省市地圖(http:// cos.name /2009/07/drawing-china-map-using-r/)• 謝益輝:用R畫中國地圖並標註城市位置(http://yihui.name/cn/2008/10/china-map-and-city-locations-with-r/)• 謝益輝:終於搞定了中國分省市地圖(
  • 【R】如何用 R 繪製地圖
    本文主要包含三種繪製地圖的方法:繪製基礎地圖、基於空間數據格式(shapefile)繪製地圖以及如何調用百度地圖和谷歌地圖的數據來繪製地圖
  • 使用REmap繪製中國地圖
    上次我們介紹了使用ggplot2繪製中國熱力地圖,需要溫習的同學可以點擊以下連結 使用ggplot2繪製中國地圖  。
  • ggplot2 | 使用ggplot2工具包繪製地圖
    ggplot2工具包用於繪製地圖的有如下幾個函數:這些函數中,最常用的是前兩個函數,本篇就來介紹這兩個函數。加載相關工具包和示例數據:library(ggplot2)library(patchwork)library(sf)library(RColorBrewer)library(tidyverse)data <- socviz::county_data
  • Kaggle 使用Python和R繪製數據地圖的十七個經典案例(附資源)
    數據包下載連結:http://docs.ggplot2.org/current/map_data.html然後,創建地圖本身就像創建任何其他ggplot可視化一樣熟悉。美國的吸菸者和非吸菸者在地圖上的分布。這裡,還有一些更好的資源用於使用地圖、mapsdata和ggplot2:請注意,你目前無法在內核中使用ggmaps。
  • Python可視化與basemap數據地圖系列1
    最近在梳理Python中可以製作數據地圖的可視化工具包,分別實踐了geopandas、folium、Basemp,通過對比發現,靜態地圖中最為成熟的最終還得是
  • 【薦】Map Lab地圖可視化
    Map Lab是高德地圖開發的一款數據可視化展示與分析軟體,通過數據的錄入,能快速產出各種類型的可視化分析地圖,十分適合沒有編程基礎的新手,可視化效果也非常美觀。從MapLab實例教程中可以看出,它支持點類型、線類型、面類型、熱力圖的表示。