You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:50:23