【R语言】使用leaflet绘制沈阳地铁线路图——R实训第六次作业
参考:
一、惭愧惭愧,基本都是抄自这个大牛学长,自己做了一部分改进——R语言绘制沈阳地铁线路图
二、这个发布的时间比学长还要早(学长可能也借鉴过)——上海地铁数据可视化
三、这个是真正的大牛,从他的文章里我学了好多leaflet的知识,但是他的文章不能直接让你完成这个作业,所以心急的就别看了——R语言在线地图神器:Leaflet for R包(一)~(六)
百度地图——沈阳地铁图
title: “R实训第六次作业”
output: html_notebook
1. 使用leaflet绘制地铁线路图,要求
1) 图中绘制地铁线路
导入包
library(leaflet) #map
library(dplyr) #arrange()
library(lubridate)#period_to_seconds()
library(sqldf) #sqldf
导入数据
stations <-
read.csv("D:\\张志浩\\大数据班\\R语言实验-徐娇\\R第5次实训\\数据\\systation.csv")
按照line(线路编号), line_id(站编号)进行排序
stations <- arrange(stations, line, line_id)
地铁颜色,从上海地铁官网获取
一号线为红色(red):#FF0000 二号线为金色(gold):#FFD700
lines_color <-
data.frame("line" = c(1, 2),
"color" = c("#FF0000", "#FFD700"))
使用该addProviderTiles()函数添加许多流行的免费第三方底图
Shenyang <- leaflet() %>%
setView(lng = 123.44, lat = 41.81, zoom = 11) %>% addProviderTiles("CartoDB.Positron")
在地图地图上把地铁站标记出来
for (line in unique(stations$line)) {
line_color <- lines_color[lines_color$line == line,]$color
line_data <- stations[stations$line == line,]
Shenyang <- Shenyang %>%
addPolylines(lat = line_data$gps_lat,
lng = line_data$gps_lon,
color = line_color)
}
为添加地铁站名做准备有的地铁站为两条地铁线路的交叉点,在点击该点时我需要将两条线路都标明,例如:青年大街站,1/2
stations_no <- nrow(stations)
for (i in 1:stations_no) {
s <- stations$station[i]
stations$lines[i] <-
paste(stations[stations$station == s, ]$line, sep = "", collapse = "/")
}
添加地铁站名
pal <-
colorFactor(as.character(lines_color$color), domain = stations$line)
Shenyang <- Shenyang %>%
addCircleMarkers(
stations$gps_lon,
stations$gps_lat,
popup = paste(stations$station, stations$lines, sep = ","),
color = pal(stations$line),
radius = 1.5
) %>%
addLegend(pal = pal, values = stations$line)
Shenyang
2) 各站点展示进站流量(08:00:00-08:05:00间的数据),流量的大小用标记的大小表示,并且提示线路、站点、流量的具体数值。
最好的办法就是将第五次实验的数据用在这里(我没有使用,因为时间不够了,我打算周末去完善)
stadata <-
read.csv("D:\\张志浩\\大数据班\\R语言实验-徐娇\\R第5次实训\\数据\\SY-20150401.csv")
选取08:00:00-08:05:00间的数据
更好的办法是把第五次实训的数据(将数据处理成每条数据处于一天中的第几个5分钟)
确定08:00:00-08:05:00属于第几个五分,然后直接从第五次实训生成的数据中获取
stadata$se <- period_to_seconds(hms(stadata$V3))
stadata <- filter(stadata, V6 == 0 & se >= 28800 & se <= 29100)
getR <- function(quakes) {
sapply(quakes$count, function(count) {
count / 40
})
}
stad <- substring(stadata['V4'][, ], 4)
stad <- data.frame(stad)
按照地铁名排序并计算流量
names(stad)[1] <- 'station'
stations <- stations[order(stations$station), ]
count <- sqldf("select station, count(*) from stad group by station")
s <- merge(count, stations, by = "station")
names(s)[2] <- c('count')
绘制流量图
Shenyang %>% addCircleMarkers(
s$gps_lon,
s$gps_lat,
popup = paste(s$station, s$lines, sep = ","),
color = pal(s$line),
radius = getR(s),
label = as.character(s$count)
) %>% setView(lng = 123.44, lat = 41.81, zoom = 11)%>%addTiles()
2.使用plotly绘制(17:00:00-17:05:00)出站流量最多的五个站点的出站流量(柱状图)。
library(plotly)
stadata <-
read.csv("D:\\张志浩\\大数据班\\R语言实验-徐娇\\R第5次实训\\数据\\SY-20150401.csv")
获取17:00:00-17:05:00的数据
stadata$se<-period_to_seconds(hms(stadata$V3))
stadata<-filter(stadata,V6!=0 & se>=61200 & se<=61500)
stad<-substring(stadata['V4'][,],4)
stad<-data.frame(stad);
names(stad)[1]<-'station'
按站名排序并计算流量
stations<-stations[order(stations$station),]
count<-sqldf("select station, count(*) from stad group by station")
s<-merge(count,stations,by="station")
青年大街是1号线和2号线相交站,额外处理
names(s)[2] <- c('count')
s[17, 2] <- s[17, 2]*2
画图
st <- s[-18,]
st <- st[order(-s$count),]
st<-st[1:5, 1:2]
plot_ly(st, x = ~ station, y = ~ count)%>%add_bars()
大家好,我是[爱做梦的子浩](https://blog.csdn.net/weixin_43124279),我是东北大学大数据实验班大三的小菜鸡,非常向往优秀,羡慕优秀的人,已拿两个暑假offer,欢迎大家找我进行交流😂😂😂
这是我的博客地址:[子浩的博客https://blog.csdn.net/weixin_43124279]
——
版权声明:本文为CSDN博主「爱做梦的子浩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。