您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)R語言可視化的中心放射狀路徑圖是怎樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
最近一直在研究ggplot剩余還沒有涉略過的圖表類型,試圖挖掘出一些新的圖表形式,就像是該包的作者所暗示的那樣,ggplot2只是給你搭建了一個圖層語法環(huán)境,至于具體能創(chuàng)造出何種圖形,全憑自己的想象力。
慢慢的我發(fā)現(xiàn)還有一類geom_segment對象自己一直沒有嘗試過,于是滿心歡喜的嘗試了一下,果然還是有收獲的,我發(fā)現(xiàn)通過這個segment圖層,可以批量的創(chuàng)建放射狀線條圖,也就是路徑圖,這解決了我一直以來的難題,今天順便分享給大家。
加載包:
library(ggplot2)
library(ggmap)
library(plyr)
library(maptools)
加載中國省份行政地圖:
china_map<-readShapePoly("c:/rstudy/bou2_4p.shp")
x <- china_map@data
xs <- data.frame(id=row.names(x),x)
轉(zhuǎn)換為數(shù)據(jù)框并合并城市數(shù)據(jù):
china_map1 <- fortify(china_map)
china_map_data <- join(china_map1, xs, type = "full")
mydata <- read.csv("c:/rstudy/geshengzhibiao.csv")
china_data <- join(china_map_data, mydata, type="full")
province_city <- read.csv("c:/rstudy/chinaprovincecity.csv")
拆分蘭州數(shù)據(jù):
newdata<-subset(province_city,city=="蘭州")
newdata1<-subset(province_city,city!="蘭州")
sourcex<-rep(newdata$jd,33)
sourcey<-rep(newdata$wd,33)
制作以蘭州為中心的點對點作圖數(shù)據(jù):(可以類比之前REmap路徑圖數(shù)據(jù)源)
tagetx<-newdata1$jd
tagety<-newdata1$wd
dataA<-data.frame(sourcex,sourcey,tagetx,tagety)
dataB<-newdata1[,1:2]
dataC<-cbind(dataB,dataA)
dataC$point<-round(runif(33,10,50))
利用geom_segment()圖層制作放射路徑圖:
ggplot()+
geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+
geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+
coord_map("polyconic") +
geom_segment(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+
theme_nothing()
這里再稍微的擴展一下,其實以上你看到的放射狀線條是蘭州與其他城市之間的直線,之所以變的有弧度,只是因為加了地圖投影的緣故,這里我可以取消投影參數(shù),看下效果。
ggplot()+
geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+
geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+
geom_segment(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+
theme_nothing()
這里取消投影參數(shù)之后,線條變成了點間直線,但是默認的不帶投影的地圖看起來與我們認知中的中國地圖形狀有些不一樣,好像被壓扁了一樣。
其實這里還有一個圖層函數(shù)也可以做出來這種放射狀線條,geom_curve(),圖層,不過它本身就是有弧度的曲線,曲率可以通過參數(shù)進行微調(diào)。
ggplot()+
geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+
geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+
geom_curve(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+
theme_nothing()
曲率調(diào)整:
ggplot()+
geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+
geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+
geom_curve(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"),curvature = 0.8)+ #用于調(diào)整曲率,范圍在-1~1之間。
theme_nothing()
ggplot()+
geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+
geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+
geom_curve(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"),curvature =-0.5)+
theme_nothing()
當然,通過圖形疊加,我們還可以重復多次這樣的放射狀線條圖。
以下以北京為例:
newdataA<-subset(province_city,city=="北京")
newdataB<-subset(province_city,city!="北京")
soux<-rep(newdataA$jd,33)
souy<-rep(newdataA$wd,33)
tagx<-newdataB$jd
tagy<-newdataB$wd
dataD<-data.frame(soux,souy,tagx,tagy)
dataE<-newdataB[,1:2]
dataF<-cbind(dataD,dataE)
dataF$point<-round(runif(33,10,50))
兩個中心的路徑圖(蘭州、北京)
ggplot()+
geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+
coord_map("polyconic") +
geom_segment(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+
geom_segment(data=dataF,aes(x=soux,y=souy,xend=tagx,yend=tagy,colour="blue"))+
geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+
theme_nothing()
關(guān)于R語言可視化的中心放射狀路徑圖是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。