中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解R語言可視化中ggplot所支持的數據地圖素材類型

發布時間:2021-11-22 09:31:55 來源:億速云 閱讀:462 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關如何理解R語言可視化中ggplot所支持的數據地圖素材類型,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

做了這么多數據地圖,是時候該總結一些心得和理念了,今天討論ggplot2所支持的數據地圖素材格式。

library("plyr")

library("dplyr")

library("rgdal")

library("sf")

library(maptools)

library("ggplot2")

library("ggthemes")

library("geojsonio")

options(stringsAsFactors=FALSE,warn=FALSE,encoding="UTF-8")

今天來跟大家分享一下關于ggplot2系統制作數據地圖的源數據支持問題,一直覺得這個問題很重要。

其實分享過這么多期的數據地圖,我所用的數據地圖素材無外乎以下三種:

  • 傳統的shp素材;

  • json素材;

  • 地圖包內置地圖素材。

其中因為第三種素材的格式跟我們導入的shp空間數據集格式一致,這里重點講解前兩種數據源。

雖然從數據存儲格式上來講我們分為shp素材、json素材,但是由于在R語言中使用ggplot2作圖,所支持的數據集對象大致又可分為兩類,它們都可以由shp、json數據文件轉化而來。

  • sp:SpatialPolygonDataFrame

  • sf:Simple feature list column

所以說數據文件格式和空間數據集對象格式的關系可以這么表述:

如何理解R語言可視化中ggplot所支持的數據地圖素材類型

這兩種格式的數據集所描述的信息差不多是一致的。第一種格式(sp)是R語言繪圖比較傳統的數據格式,它將地理信息數據分割為兩大塊:描述層和映射層。

在數據存放時,描述層記錄各個地理區域的名稱、ID、編號、簡寫、iOS編碼,以及其他標識信息和度量變量,描述層是一個dataframe,我們可以用data@data來提取描述層的數據框。

而對應的幾何映射層,是每一個行政區域的多邊形邊界點,這些邊界點按照order排序,按照group分組。多邊形邊界點信息是一個多層嵌套的list結構,但是我們仍然可以通過fortity函數將其轉化為數據框。

即sp空間數據對象是一個dataframe(描述層)和polygons(幾何映射層)兩個對象的組合對象。

而sf對象將這種控件數據格式件進行了更加整齊的布局,使用st_read()導入的空間數據對象完全是一個整齊的數據框,擁有整齊的行列,這些行列中包含著數據描述和幾何多邊形的邊界點信息。其中最大的特點是,它將每一個行政區劃所對應的幾何邊界點封裝成了一個list對象的記錄,這條記錄就像其他普通的文本記錄、數值記錄一樣,被排列在對應行政區劃描述的單元格中。

這樣做的好處是,我們不必要自己做這種從描述層到幾何映射層的對應關系的鏈接,因為對應關系本身就已經存在。然后如果是第一種sp格式的話,在制作ggplot2地圖過程中,我們需要分離描述層和幾何映射層,并為兩者指定連接的id(主鍵),如果算上你要將自己的業務數據和描述層數據合并這一動作的話,那么總共我們需要合并兩次數據。(倘若描述層均沒有對應的id,你需要為其構造虛擬id,這一次合并算上的話,那么就需要三次合并)。

然而在sf對象中我們僅需指定一次合并即可,即描述層和業務指標數據的合并。

接下來通過案例演示來解釋以上原理:

通常我們制作一個數據地圖的方式如下:

shapefile文件導入:

setwd("D:/R/rstudy/CHN_adm")

china_map<-readShapePoly("CHN_adm1.shp")

Warning message:

use rgdal::readOGR or sf::st_read 

當我使用sp包導入shp數據集時,R提示以上warning,也就意味著這種傳統的方式在不久的將來就會被遺棄,而且建議使用rgdal::readOGR和sf::st_read 來導入。(這也是我今天講這篇內容的意義所在,真不好說sp包哪天就停止服務了,之前那那些寫過的代碼可能全部都要掛掉!)

rgdal包可以替代sp包導入shp數據(事實上它也支持json數據的導入,似不似很強大),而sf包則是新崛起,支持sf對象格式導入的包,而且ggplot2率先給這個包開了綠燈,直接創建了geom_sf圖層(之后會講到)

china_map<-readOGR("CHN_adm1.shp",stringsAsFactors=FALSE)

OGR data source with driver: ESRI Shapefile 

Source: "CHN_adm1.shp", layer: "CHN_adm1"

with 32 features

It has 9 fields

同樣我用rgdal包導入該素材,不僅沒有警示,而且還給出詳細的數據格式描述信息。

此時按照舊方法,我需要分別提取出描述層的dataframe和幾何映射層的數據框。

mydata<-china_map@data

mymapdata<-fortify(china_map)

這樣通過提取和轉化之后,描述層是一個行政區域描述信息的數據框,幾何映射層轉化為一個包含經緯度指標,group分組標量,order排序變量以及ID的數據框。

如果我們需要制作填色地圖,那么我們需要先將自己的業務指標和描述層數據進行整理和并,并將合并后的數據與幾何映射層的數據框進行合并。

這里我虛擬一個指標。

mydata$zhibiao<-runif(32,10,20)

將其與幾何映射層進行合并:

mynewmapdata<-merge(mymapdata[,c(-4,-5)],mydata[,c("ID_1","NAME_1","zhibiao")],by.x="id",by.y="ID_1")

此時即可進行多邊形的填色映射。

ggplot()+

geom_polygon(data=mynewmapdata,aes(x=long,y=lat,group=group,fill=zhibiao),col="grey95")+

scale_fill_gradient(low="white",high="steelblue") +

coord_map("polyconic") +

theme_map()

如何理解R語言可視化中ggplot所支持的數據地圖素材類型

如果是要添加點映射的話,只需再增加一個geom_point()的圖層。

這樣的步驟看起來確實很繁雜,針對這種sp格式的地圖數據,如果你不想做復雜的合并整理構成,ggplot2幾何圖層對象中有一個簡化版的函數——geom_map()。

這個函數雖然使用了兩個分離的數據框:描述層,幾何映射層,但是它可以允許你通過指定兩者之間的關鍵詞(主鍵)來完成這種合并對接過程。而不需要做復雜的拼接合并。(幾何映射層的關鍵詞必須命名為region,而描述層的關鍵字命名無要求,但是需顯聲明指定)

ggplot(mydata,aes(map_id=ID_1))+

geom_map(aes(fill=zhibiao),map=mymapdata %>% rename(region=id))+

scale_fill_gradient(low="white",high="steelblue") +

expand_limits(x=mynewmapdata$long,y=mynewmapdata$lat)+

coord_map("polyconic")+

theme_map()

如何理解R語言可視化中ggplot所支持的數據地圖素材類型

以上代碼免去了繁雜的合并轉化過程,節省了大量代碼,是數據格式制作地圖的極佳替代方案。

接下來談論下sf格式,這種格式的數據既可以來源于json格式數據,也可以來源于shp格式數據,非常自由。

china_map<-st_read("CHN_adm1.shp",stringsAsFactors=FALSE,quiet=TRUE)

使用這種格式數據進行地圖制作,僅需合并一下業務數據(這里我就直接生成了):

china_map$zhibiao<-runif(32,10,20)

china_map <- sf::st_transform(china_map, "+init=epsg:4326")

ggplot(china_map)+

geom_sf(aes(fill=zhibiao),col="grey95")+

scale_fill_gradient(low="white",high="steelblue") +

coord_sf()+

theme_map()

如何理解R語言可視化中ggplot所支持的數據地圖素材類型

關于json素材的導入,我在之前講leaflet數據地圖素材時已經講過這幾種情況,這里不再贅述。

R語言中可以制作數據地圖的包有很多(我長用到的):

#需要自己準備數據地圖素材:

map()

ggplot(china_map1)+geom_line()  #只能做輪廓圖

ggplot(china_map1)+geom_ploygon()

ggplot(china_map1)+geom_sf()

ggplot(china_map1)+gg_map()

可以調用在線地圖庫素材:

ggmap()

leaflet()

REmap()

關于如何理解R語言可視化中ggplot所支持的數據地圖素材類型就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴仁县| 承德县| 商南县| 芦山县| 中卫市| 原阳县| 宁化县| 香河县| 西林县| 清苑县| 文昌市| 资讯| 温宿县| 安吉县| 万全县| 修武县| 罗平县| 高邑县| 垣曲县| 克什克腾旗| 南召县| 双牌县| 曲阜市| 汉阴县| 新化县| 星子县| 河津市| 巩留县| 郯城县| 高尔夫| 泸州市| 安平县| 蓬安县| 鹿泉市| 安阳县| 洱源县| 页游| 上蔡县| 福贡县| 营口市| 黄石市|