R语言教程之绘制交通绘制交通
当前位置:以往代写 > R语言教程 >R语言教程之绘制交通绘制交通
2019-06-13

R语言教程之绘制交通绘制交通

R语言教程之绘制交通绘制交通

概览

为了绘制交通流量图,我们先要获得任意两个结点之间,交通的密集程度。随后我们把结点匹配到地图上,并依据不同交通密集程度给结点着以不同颜色,最终完成流量图。

安装库

本次推送用到的库包括plyrggplot2maptools。以plyr为例,安装方法为:

install.packages('plyr')

下载数据

本次推送需要用到的数据为英国地图和交通始发地及目的地数据。读者可以点击http://ingrid.geog.ucl.ac.uk/~james/msoa_popweightedcentroids.csv和http://marlin.casa.ucl.ac.uk/~james/wu03ew_v1.csv.zip进行下载。

获得结点间的交通流量

> library(plyr)                                        #读入必要的库
> library(ggplot2)
> library(maptools)
> wu03ew_v1 <- read.csv("wu03ew_v1.csv")               #导入交通数据
> input<- wu03ew_v1[,1:3]                              #导入我们需要的前三列数据:起始地、目的地、交通频度
> names(input)<- c("origin", "destination","total")    # 给三列数据重新命名,方便后续操作

将交通数据和地图匹配

> centroids <- read.csv("msoa_popweightedcentroids.csv")                                              #读入地图
> or.xy<- merge(input, centroids, by.x="origin", by.y="Code")                                         #获取起始点坐标
> names(or.xy) <- c("origin", "destination", "trips", "o_name", "oX", "oY")                           #和上面保持一致,我们给数据列重新命名,以便后续匹配
> dest.xy <- merge(or.xy, centroids, by.x="destination", by.y="Code")                                 #获取起始点坐标
> names(dest.xy) <- c("origin", "destination", "trips", "o_name", "oX", "oY","d_name", "dX", "dY")    #同样,对数据重命名

绘图

> xquiet <- scale_x_continuous("", breaks = NULL)                               #确定坐标轴的标度
> yquiet <- scale_y_continuous("", breaks = NULL)
> quiet <- list(xquiet, yquiet)                                                 #把两条坐标轴的标度属性放在一个列表里,后续操作可以少打一些代码
> ggplot(dest.xy[which(dest.xy$trips > 10),], aes(oX, oY)) +                    #用来绘图的数据是dest.xy,在这里我们略去交通频度小于10的连线,以免图片太过杂乱
+ geom_segment(aes(x = oX, y = oY,xend = dX, yend = dY, alpha = trips), col = "white") +      #把起始点、目的地的坐标放入aesthetics中,它们连线的透明度即交通频度
+ scale_alpha_continuous(range = c(0.03, 0.3)) +                                #调整透明度上下界
+ theme(panel.background = element_rect(fill = 'black', colour = 'black')) +    #加主题
+ quiet +                                                                       #把刚刚的坐标标度加入ggplot中
+ coord_equal()

最终成品如上图所示。图中亮度越高代表交通流量越大,比如图中亮度最高的地区即为英国交通最密集的结点——伦敦。此外,英国其余几个大城市,如利物浦、爱丁堡等地,在图中的亮度都比较高,所代表的交通密集程度很大。

    关键字:

在线提交作业