如图,背景是卫星地图,在其中一些位置上空添加数据点来表示飞行高度。如果足够强大,可以实现更复杂的功能,例如用垂线长度来表示飞行高度,颜色来表示气温,数据点大小来表示气压等等。
其实,这相当于把普通的 x-y 散点图画到纸上,然后把纸立在地图上,y 轴朝上指,而 x 轴的每一个值代表地图上一个经纬度坐标。
这种图如何绘制? R 语言或别的开源工具都可以。
我琢磨了好半天,都不成。下面是我已经做过的步骤。
绘制卫星地图的话,可以用 ggmap:
library(ggmap)
register_google(key = "[your_api_key") # 此处使用你的 key
map <- qmap('munich', zoom = 1, maptype = 'satellite')
map
自制一个示例数据框,包含经度、纬度、飞行高度三列,添加到图上:
flight <- data.frame(long = -100:100, lat = rnorm(201), alt = 1:201)
map2 <- map + geom_line(aes(x = long, y = lat, color = alt), data = flight)
map2
如何立体化?我想到的是 rayshader 包,然而用在这里就被降维打击成二维了:
devtools::install_github("tylermorganwall/rayshader")
rayshader::plot_gg(map2)
想用 rayshader 实现三维效果也是可以的,直接用 ggplot 就行:
p <- ggplot(map_data("world"), aes(long,lat, group=group)) + geom_polygon()
map3 <- p + geom_point(aes(x = long, y = lat, color = alt, group = alt), data = flight)
rayshader::plot_gg(map3)
然而,这距离我的目标还差两步:一步是 rayshader 只能让平面凸起,无法实现 Google Earth 那种球体效果:另一步是背景没有使用卫星地图。
哪位指点一二?谢谢!