本系列主要介绍R语言中当下最好的3D地理可视化,且完全可以商用或科研用。
首先展示一下三种包做出的可视化效果,
(1)echarts4r
完整视频见本人B站链接,
(2)mapdeck
引用自mapdeck官方文档[1]
(3)rayshader
以上两图转自包作者推特[2][3]
其中,echarts4r与mapdeck能嵌入到shiny中,rayshader目前不支持。
本文首先介绍
echarts4r
在3D地理可视化的用法,
简介
echarts是一款优秀的前端交互可视化框架,免费商用,一开始由百度开发,现已加入Apache体系,官方实例见此引用链接 [4] 。 echarts4r的作者很好的将echarts封装到了R中,本文略过ecahrts4r基本图表(柱状图、饼图、折线图、桑基图等)的说明,借echarts4r中3Dglobe的例子,向大家介绍如何实现echarts的js配置文档与R之间的互通,基于此读者就可以根据文档自行发挥主观能动性,做出自己想要的交互可视化。官方案例演示 [5]
library(echarts4r.assets)
library(echarts4r)
flights
paste0("https://raw.githubusercontent.com/plotly/datasets/",
"master/2011_february_aa_flight_paths.csv")
)
# Lines 3D
# Globe
# get tetures: echarts4r-assets.john-coene.com
flights %>%
e_charts() %>%
e_globe(
environment = ea_asset("starfield"),
base_texture = ea_asset("world topo"),
height_texture = ea_asset("world topo"),
displacementScale = 0.05
) %>%
e_lines_3d(
start_lon,
start_lat,
end_lon,
end_lat,
name = "flights",
effect = list(show = TRUE)
) %>%
e_legend(FALSE)
效果如下,实际上渲染出的是个旋转的动图。
我们对照一下ecahrts中globe的配置文档
看下,environment 是背景参数,base_texture 表示地球表面,height_texture 表示地球表面高度纹理,displacementScale表示地球顶点位移的大小。
这些参数我们都可以进行修改,如改变地球表面图片,将
base_texture = ea_asset("world topo")改成
base_texture = ea_asset("world_night"),同时高度纹理也要改成
height_texture = ea_asset("world_night"),效果如下, 这些都是内置的图片,路径在echarts4r.assets包的assets文件夹中(~/echarts4r.assets/assets) 其中,部分图片是我从哈勃望远镜的网站 [7] 下的,如果想改成自定义的背景图片,只需要将environment 部分改成
environment = ea_convert("./xxx/xxx.jpg")即可,效果如开篇的gif图所示。 自定 义完整的配置项参数 上面修改的参数都是ecahrts4r例子中或者是函数说明里的,如果想修改完整的配置项参数呢,那就需要对照echarts的官方文档了,链接见 参考6 , globe的配置项结构如下, ecahrts4r中的e_globe对应的就是文档中的globe,若要修改参数,直接在e_globe内部加就行,同级直接加,有子层级的需要加一层list包裹,格式为
v1 = para1, v2 = para2, v3 = list(v3.1 = para3.1)...注意,除了TRUE/FALSE,其余参数大小写需完全一致! 举例如下,
#######
library(echarts4r.assets)
library(echarts4r)
flights
paste0("https://raw.githubusercontent.com/plotly/datasets/",
"master/2011_february_aa_flight_paths.csv")
)
# Lines 3D
# Globe
# get tetures: echarts4r-assets.john-coene.com
flights %>%
e_charts() %>%
e_globe(
base_texture = ea_asset("world_topo"),
height_texture = ea_asset("world_topo"),
displacementQuality = 'high',
displacementScale = 0.05,
shading = 'realistic',
light = list(main = list(shadow = TRUE))
) %>%
e_lines_3d(
start_lon,
start_lat,
end_lon,
end_lat,
name = "flights",
effect = list(show = TRUE)
) %>%
e_legend(FALSE)
我想修改light中的main中的shadow参数,由于是多层级,我需要加两层list,且要把true变成R中的TRUE。效果如下,
官方JS实例转R
以本链接 [8] 为例,该实例如下, 有两种方式 (1)转option (2)转option中的globe 这里主要介绍第二种。首先,把globe部分抽出来,再遵循- : 转=
- {}转list()
- []转list()
- true/false转TRUE/FALSE
#######
library(echarts4r.assets)
library(echarts4r)
flights
paste0("https://raw.githubusercontent.com/plotly/datasets/",
"master/2011_february_aa_flight_paths.csv")
)
# Lines 3D
# Globe
# get tetures: echarts4r-assets.john-coene.com
flights %>%
e_charts() %>%
e_globe(
base_texture = ea_asset("world_topo"),
height_texture = ea_asset("world_topo"),
displacementScale = 0.04,
shading = 'realistic',
environment = ea_asset("starfield"),
realisticMaterial = list(roughness = 0.9),
postEffect = list(enable = TRUE),
light = list(
main = list(intensity = 5,
shadow = TRUE),
ambientCubemap = list(diffuseIntensity = 0.2)
)
) %>%
e_lines_3d(
start_lon,
start_lat,
end_lon,
end_lat,
name = "flights",
effect = list(show = TRUE)
) %>%
e_legend(FALSE)
注,删掉了light>ambientCubemap>texture参数,效果如下,
echarts globe中的参数丰富,如景深,聚焦,光线等,大家可以自行尝试。
以上就是本节关于echarts的3D地理可视化的全部内容,欢迎交流!