上图是对国内机场和航线信息进行了一个简单的可视化。圆点表示了中国163个机场的位置,线条显示了5381条航线。之前曾在这个网站上见到了作者用R语言来对全世界的航线进行可视化。正所谓见贤思齐,本图就是模仿山寨的结果。但是这个图的生成没有原文那么复杂,所用到的地理图形包和步骤也与原例略有不同,比较失败的是没有展现出原图的夜景效果。具体实施的步骤如下:
- 从这个网站下载到机场数据和航线数据;
- 从中挑选出中国的机场和国内航线,并加以整理;
- 用ggmap包读取谷歌地图;
- 将机场和航线信息绘制在地图上。
library(ggmap) data.port <- read.csv('d:\\airports.dat',F) data.line <- read.csv('d:\\routes.dat',F) library(stringr) # 找到中国的机场 portinchina <- str_detect(data.port[,'V4'], "China") chinaport <- data.port[portinchina,] # 去除少数几个没有编号的机场 chinaport <-chinaport[chinaport$V5!='', c('V3','V5','V7','V8','V9')] names(chinaport) <- c('city','code','lan','lon','att') # 找出国内航班 lineinchina <- (data.line[,'V3'] %in% chinaport$code) & (data.line[,'V5'] %in% chinaport$code) chinaline <- data.line[lineinchina,c('V3','V5','V9')] names(chinaline) <- c('source','destination','equipment') #构建一个函数,根据机场编码得到经纬度 findposition <- function(code) { find <- chinaport$code==code x <- chinaport[find,'lon'] y <- chinaport[find,'lan'] return(data.frame(x,y)) } # 将机场编码转为经纬度 from <- lapply(as.character(chinaline$source),findposition) from <- do.call('rbind',from) from$group <- 1:dim(from)[1] names(from) <- c('lon','lan','group') to <- lapply(as.character(chinaline$destination),findposition) to <- do.call('rbind',to) to$group <-1:dim(to)[1] names(to) <-c('lon','lan','group') data.line <- rbind(from,to) temp<- data.line[data.line$group<100,] # 用ggmap包从google读取地图数据,并将之前的数据标注在地图上。 ggmap(get_googlemap(center = 'china', zoom=4, maptype='roadmap'),extent='device')+ geom_point(data=chinaport,aes(x=lon,y=lan), colour = 'red4',alpha=0.8)+ geom_line(data=data.line,aes(x=lon,y=lan,group=group), size=0.1,alpha=0.05,color='red4')
有兴趣的同学还可以进一步研究,哪个航线最远,分布如何,哪条航线最多,航线飞机档次如何,哪个机场海拔最高,哪个机场最忙....
此评论已被作者删除。
回复删除看你博客收益匪浅。
回复删除我最近有个想法,因本人在计算机语言上不太精通,R正在努力学习中,我想通过Blooberg提供的Open API,用R读取其数据。有一个R包叫Rbbg可以实现读取收费的bloomberg数据,如果利用Rbbg从Open API读取数据,那就非常棒了。
Bloomberg's Open API:http://www.openbloomberg.com/open-api/
Rbbg:http://findata.org/rbloomberg/
这个包以前叫rbloomberg,现在改名为Rbbg,CRAN上没有这个包,安装方法是:install.packages("Rbbg", repos = "http://r.findata.org")
我自己无能为力,如果您要是有时间研究一下。
这个应该不是免费的数据来源,需要先装好bloomberg的软件。你看http://findata.org/rbloomberg/rbloomberg-manual-0-4-144.pdf这份文档中的这句话:RBloomberg will only work on a Bloomberg workstation.
删除我也尝试装这个包,没法建立连接。如果你是要一般的股票数据的话,也可以用yahoo的数据源。
非常感谢您的回复!
回复删除从yahoo里调用一般股票数据的方法我已搞懂了。最近想研究欧债危机,所以需要欧洲多个国家债券收益率和CDS spread。我知道bloomberg上有这些数据,但这都是要钱的。今天早上发现Bloomberg提供了Open API,好像通过C/C++,Java等可以免费获得其数据。可是我不懂如何操作,不知道你是否了解。
不好意思啊,不会java,也不会C。
删除学长,这个airlines.dat 的数据集需要翻墙才能下载吗??我现在在不下来。。
回复删除不需要翻,这网站下载是很慢,好像还不支持多线程下载。
删除我是r2.15.1的版本,其他包都是最新的。但是运行最后一部分报错:
回复删除1: Removed 1 rows containing missing values (geom_point).
2: Removed 14 rows containing missing values (geom_path).
请问是什么原因?
还有在另一个地方你的代码是错的。data.line <- read.csv。。。这句错了
因为地图不够大的原因漏画了中国边疆地区一个点,所以会有警告。但这个关系不大。
删除那行代码错在哪里?
1已经被修改好了。
删除2但是由于缺失这些数据,最后的图无法绘出。只有点,没有线。如何修改?
解决了没有线的问题了吗?
删除博主 知道哪里能下到生物数据吗?
回复删除就是那种 病例的DNA SNP 一类的
我对生物了解不多,你可以到这里看看。http://www.bioconductor.org/ 国外还是有很多公开的生物数据的。有些书上也提供了数据资源。
删除博主,您好,我想问一下,就您做的这个图,如果想以路径(ggmap::route)的形式来展示,而不是直线(geom_line),可以同时展示多条路径吗
删除我看见有人这么做过,但是线路过多的话,可以画不出来
删除我在最后画图的时候出现Error: Discrete value supplied to continuous scale
回复删除这个应该怎么办?
只出来了点,没有出来线,不知怎么解决? 查看了data.line和data.port的数据都是正确的。 需要调用其他的库吗? 还是说data.line 那里是不对的啊, geom_line(data=data.line,aes(x=lon,y=lan,group=group) 这个group=group 何解???
回复删除goruntulu show
回复删除ücretli
LJHU