R语言交互地图结合热力图(实战篇)

衔接上文,我做了一个完整的 Shiny 应用,支持下拉选择不同变量绘制热力图,并且保留了每个样点的点位、弹窗信息等交互功能,完全可以直接跑起来!


✅ 完整 Shiny 脚本:支持热力图变量切换 + 点图展示

library(shiny)
library(leaflet)
library(leaflet.extras)
library(dplyr)

# 🧪 1. 示例数据(你可以用 read.csv() 替换)
soil_data <- data.frame(
  ID = paste0("S", 1:15),
  lon = runif(15, 120.1, 120.3),
  lat = runif(15, 31.4, 31.6),
  treatment = rep(c("脱硫石膏", "生物炭", "猪粪", "鸡粪", "混合"), each = 3),
  level = rep(c("低", "中", "高"), 5),
  pH = round(runif(15, 7.5, 9), 2),
  SOC = round(runif(15, 5, 12), 2),
  粒有C = round(runif(15, 1, 4), 2),
  微团聚体C = round(runif(15, 2, 6), 2)
)

# 🖼️ 2. UI 界面
ui <- fluidPage(
  titlePanel("滨海盐渍土样点分布 - 可选热力图变量"),
  sidebarLayout(
    sidebarPanel(
      selectInput("treat", "选择改良剂类型:", choices = unique(soil_data$treatment)),
      selectInput("level", "选择添加量:", choices = unique(soil_data$level)),
      selectInput("heat_var", "选择热力图变量:",
                  choices = c("SOC", "pH", "粒有C", "微团聚体C"))
    ),
    mainPanel(
      leafletOutput("map", height = 600)
    )
  )
)

# ⚙️ 3. 服务器逻辑
server <- function(input, output, session) {

  # 根据选择过滤数据
  filtered_data <- reactive({
    soil_data %>%
      filter(treatment == input$treat, level == input$level)
  })

  # 绘制地图
  output$map <- renderLeaflet({
    data <- filtered_data()

    # 抽取热力图变量
    heat_values <- data[[input$heat_var]]
    heat_values <- as.numeric(heat_values)

    leaflet(data) %>%
      addProviderTiles("CartoDB.Positron") %>%
      addHeatmap(
        lng = ~lon,
        lat = ~lat,
        intensity = heat_values,
        blur = 20,
        max = max(heat_values, na.rm = TRUE),
        radius = 20
      ) %>%
      addCircleMarkers(
        ~lon, ~lat,
        popup = ~paste0(
          "<strong>样点ID:</strong> ", ID, "<br>",
          "<strong>pH:</strong> ", pH, "<br>",
          "<strong>SOC:</strong> ", SOC, "<br>",
          "<strong>粒有C:</strong> ", 粒有C, "<br>",
          "<strong>微团聚体C:</strong> ", 微团聚体C
        ),
        color = "darkblue",
        radius = 6,
        fillOpacity = 0.8
      )
  })
}

# 🚀 4. 启动应用
shinyApp(ui, server)

 


🧠 怎么用你自己的数据?(以我的数据为例,可以参照这个模板)

只需要:

soil_data <- read.csv("你的数据.csv", encoding = "UTF-8")

确保你有以下字段:

字段名说明
ID样点编号
lon经度
lat纬度
treatment改良剂类型(猪粪/生物炭等)
level添加量(低/中/高)
pH土壤pH
SOC有机碳含量
颗粒C颗粒有机碳
微团聚体C微团聚体内碳

🔄 高级可扩展性建议:

  • ✅ 加一个下载按钮:导出筛选结果;

  • ✅ 可视化趋势图(柱状图 + 热力图)组合;

  • ✅ 切换地图底图(例如添加卫星地图、地形图);

  • ✅ 加时间轴控件(如果你有时间序列数据)。


可以再配个 .Rmd 版本的“交互式研究报告模板”,或者打包为网页发布到 GitHub Pages 或 shinyapps.io。这样你的工作会被人更加了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chh0715

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值