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

求基于R/Shiny的交互式地图示例代码:支持下拉选美国州缩放

在R Shiny中实现带州缩放功能的交互式Choropleth地图

嘿,我刚好做过类似的需求,给你一个完整的可运行示例代码,用leaflet配合Shiny来实现——不仅能展示美国各州的Choropleth地图,还支持通过下拉菜单选择州后自动缩放至对应区域。

需要用到的包

首先确保你安装了这些包:

install.packages(c("shiny", "leaflet", "sf", "tigris"))

完整示例代码

library(shiny)
library(leaflet)
library(sf)
library(tigris)

# 获取美国州的地理数据(设置cb=TRUE获取简化版边界,加载更快)
us_states <- states(cb = TRUE, class = "sf")

# 给每个州加一个示例数值(这里用面积,你可以替换成自己的数据)
us_states$area_sqmi <- st_area(us_states) %>% as.numeric() / 2589988.110336

ui <- fluidPage(
  titlePanel("美国州交互式Choropleth地图"),
  sidebarLayout(
    sidebarPanel(
      # 下拉菜单:选择美国州
      selectInput(
        inputId = "state_select",
        label = "选择州:",
        choices = c("全部" = "all", sort(us_states$NAME)),
        selected = "全部"
      )
    ),
    mainPanel(
      leafletOutput("state_map", height = "800px")
    )
  )
)

server <- function(input, output, session) {
  
  # 渲染初始地图
  output$state_map <- renderLeaflet({
    leaflet() %>%
      addProviderTiles("CartoDB.Positron") %>%
      addPolygons(
        data = us_states,
        fillColor = ~colorQuantile("YlOrRd", area_sqmi)(area_sqmi),
        fillOpacity = 0.7,
        color = "#BDBDC3",
        weight = 1,
        popup = ~paste0("<strong>", NAME, "</strong><br>面积: ", round(area_sqmi, 0), " 平方英里")
      )
  })
  
  # 监听下拉菜单变化,更新地图视图
  observeEvent(input$state_select, {
    if (input$state_select == "all") {
      # 回到全国视图
      leafletProxy("state_map") %>%
        fitBounds(
          lng1 = -125, lat1 = 25,
          lng2 = -66, lat2 = 49
        )
    } else {
      # 过滤选中的州数据
      selected_state <- us_states[us_states$NAME == input$state_select, ]
      # 获取该州的边界框
      bbox <- st_bbox(selected_state)
      # 缩放至该州区域
      leafletProxy("state_map") %>%
        fitBounds(
          lng1 = bbox[["xmin"]], lat1 = bbox[["ymin"]],
          lng2 = bbox[["xmax"]], lat2 = bbox[["ymax"]]
        )
    }
  })
  
}

shinyApp(ui, server)

关键功能解释

  • 地理数据获取:用tigris::states()直接获取官方的美国州边界数据,cb=TRUE参数获取简化版边界,加载更流畅。
  • Choropleth设置:用colorQuantile根据州面积生成颜色梯度,你可以替换成自己的业务数据(比如人口、收入等)。
  • 自动缩放逻辑:通过observeEvent监听下拉菜单的选择变化,当选中某个州时,用st_bbox获取该州的边界坐标,再通过leafletProxy更新地图的视图范围,实现精准缩放;选择“全部”时回到全国视图。
  • 交互弹窗:点击州区域会显示州名和面积信息,提升用户体验。

你可以直接运行这段代码,然后根据自己的需求修改数据和样式哦!

内容的提问来源于stack exchange,提问作者Newbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:28:09