如何用R的Rayshader生成带黑色高度效果的3D地图?
如何用Rayshader实现带黑色高度基底的3D地图效果?
问题简述
参考Rayshader教程制作3D地图时,替换自有SHP数据后,仅得到平面填充效果,无法实现示例中的黑色高度基底+区域高度凸起的3D效果。
当前使用代码
map <- sf::st_read('map/map.shp', quiet = TRUE) gg = ggplot(map) + geom_sf(aes(fill =AREA),linewidth=0.7,colour='black',inherit.aes=FALSE) + scale_fill_viridis('Area',na.value = 'white')+ theme(axis.line = element_blank(),axis.title = element_blank(), axis.ticks = element_blank(), axis.text = element_blank()) plot_gg(gg, multicore = TRUE, width = 6 ,height=2.7, fov = 70,offset_edges = TRUE)
效果对比
- 当前输出:

- 期望效果:

解决方案
要实现目标效果,需要修改两处关键设置:
1. 在ggplot中添加高度映射
给geom_sf的aes参数加上height=AREA,让Rayshader识别区域凸起的高度依据:
geom_sf(aes(fill = AREA, height = AREA), linewidth=0.7, colour='black', inherit.aes=FALSE)
2. 在plot_gg中配置黑色基底与高度缩放
添加ground_color="black"设置底部黑色基底,用scale参数调整高度凸起比例(根据数据范围调整数值,示例用50):
plot_gg(gg, multicore = TRUE, width = 6, height=2.7, fov = 70, offset_edges = TRUE, ground_color = "black", scale = 50)
可选:添加阴影增强立体感
如果需要更接近示例的光影效果,可在plot_gg后追加阴影函数:
add_shadow(lamb_shadow(), 0.5)
修改后的完整代码
map <- sf::st_read('map/map.shp', quiet = TRUE) gg = ggplot(map) + geom_sf(aes(fill = AREA, height = AREA), linewidth=0.7, colour='black', inherit.aes=FALSE) + scale_fill_viridis('Area', na.value = 'white')+ theme(axis.line = element_blank(), axis.title = element_blank(), axis.ticks = element_blank(), axis.text = element_blank()) plot_gg(gg, multicore = TRUE, width = 6, height=2.7, fov = 70, offset_edges = TRUE, ground_color = "black", scale = 50) add_shadow(lamb_shadow(), 0.5)
注意事项
scale参数需根据AREA字段的实际数值范围调整,凸起过高或过低时可增大/减小该值;- 确保
AREA字段为数值型,否则无法作为高度映射依据。
内容的提问来源于stack exchange,提问作者Eriza
相关产品推荐
相关产品推荐

