我正在绘制墨西哥瓦哈卡街头美食 map ,尽管我遇到了一些麻烦.我试图在Shiny中生成一个传单图,并了解Shiny的UI方面,尽管服务器方面没有那么多.我知道我必须将observe()或reactive()添加到服务器端以产生所需的结果,但我似乎无法使其工作.我在传单中加入了addlayercontrol(),因为这是需要的效果(根据所选内容隐藏和显示标记),尽管我希望SelectizeInput控制层.下面是我的代码,我包括了数据集的一小部分,以及我在服务器端try 的一些注释掉的代码.如有任何帮助或建议,将不胜感激.

library(leaflet)
library(shiny)
library(shinydashboard)
library(dplyr)

#Data Sample

long <- c(-96.72363, -96.72880, -96.72700)
lat <- c(17.06167, 17.06200, 17.06170 )
name <- c("jim", "grant", "pablo")
food <- c("tacos", "burger", "elote")


df <- data.frame(long, lat, name, food)

#subsets

palette<- colorFactor(palette = c("blue", "green", "black"),
                      domain = df$food)
tacos <- dplyr::filter(df, grepl("tacos", food))

burger <- dplyr::filter(df, grepl("burger", food))

elote <- dplyr::filter(df, grepl("elote", food))


#ui 


ui <-fluidPage(
  titlePanel(title = "Street Food Oaxaca"),
  sidebarLayout(
    sidebarPanel(
      selectizeInput("food","Select a Type:",
                  choices = unique(df$food),
                  selected = ,
                  multiple = TRUE)),
    mainPanel(h3("Map"), leafletOutput("m", width = "800", height = "600"))
  )
)

#server
server <- function(input, output, session){ 
    output$m = renderLeaflet({
    leaflet(data = df) %>%
      setView(lng = -96.725, lat = 17.0618, zoom =14)%>%
      addTiles() %>%
      addCircleMarkers( layerId = tacos,
                          data = tacos,
                          ~long,
                          ~lat,
                          group = 'tacos',
                          popup = ~as.character(name),
                          radius = 2,
                          color =  ~palette(food),
                          fillOpacity = 0.5) %>%
        addCircleMarkers( layerId = burger,
                          data = burger,
                          ~long,
                          ~lat,
                          group = 'burger',
                          popup = ~as.character(name),
                          radius = 2,
                          color =  ~palette(food),
                          fillOpacity = 0.5) %>%
        addCircleMarkers( layerId = elote,
                          data = elote,
                          ~long,
                          ~lat,
                          group = 'elote',
                          popup = ~as.character(name),
                          radius = 2,
                          color =  ~palette(food),
                          fillOpacity = 0.5) %>%
        # addPolygons(data = poly,
        #           ~long,
        #           ~lat,
        #           weight = 3,
        #           color = "red",
        #           group = "Restricted Zone" ,
        #           popup = "Restricted Zone")
      addLayersControl(
        overlayGroups = c("tacos","burger","elote", "Restricted Zone"),
        options = layersControlOptions(collapsed = TRUE)
      )


    })
}    
      
      
      #  observeEvent(
      # if(function(input$food, value ="tacos"))
      #   output$m = renderLeaflet('m')%>%
      #    removeMarker(layerId = m,c('burger', 'elote')))
                               
      #removeMarker(group == C('two', 'three'))

      # data_f <- reactive({
      #   dplyr::filter(df$food == "tacos")
      # })
      # 
      # observeEvent(data_f, {
      # 
      #   leafletProxy("map") %>%
      # 
      #     clearMarkers() }) 
    
         

  


 #Run the application 
shinyApp(ui = ui , server = server)

推荐答案

试试这个

library(leaflet)
library(shiny)
library(shinydashboard)
library(dplyr)

#Data Sample

long <- c(-96.72363, -96.72880, -96.72700)
lat <- c(17.06167, 17.06200, 17.06170 )
name <- c("jim", "grant", "pablo")
food <- c("tacos", "burger", "elote")


df <- data.frame(long, lat, name, food)

#subsets

palette <- colorFactor(palette = c("blue", "green", "black"),
                      domain = df$food)
tacos <- dplyr::filter(df, grepl("tacos", food))

burger <- dplyr::filter(df, grepl("burger", food))

elote <- dplyr::filter(df, grepl("elote", food))

ui <-fluidPage(
  titlePanel(title = "Street Food Oaxaca"),
  sidebarLayout(
    sidebarPanel(
      selectizeInput("food","Select a Type:",
                     choices = unique(df$food),
                     selected = food[1],
                     multiple = TRUE)),
    mainPanel(h3("Map"), leafletOutput("m", width = "800", height = "600"))
  )
)

#server
server <- function(input, output, session){ 
  
  df1 <- eventReactive(input$food, {
    df %>% dplyr::filter(food %in% input$food)
  })
  
  output$m = renderLeaflet({
    leaflet(data = df1()) %>%
      setView(lng = -96.725, lat = 17.0618, zoom =14)%>%
      addTiles() %>%
      addCircleMarkers( # layerId = input$food,
                        # data = input$food,
                        ~long,
                        ~lat,
                        #group = input$food,
                        #popup = ~as.character(name),
                        radius = 2,
                        color =  ~palette(input$food),
                        fillOpacity = 0.5) %>%
      # addCircleMarkers( layerId = burger,
      #                   data = burger,
      #                   ~long,
      #                   ~lat,
      #                   group = 'burger',
      #                   popup = ~as.character(name),
      #                   radius = 2,
      #                   color =  ~palette(food),
      #                   fillOpacity = 0.5) %>%
      # addCircleMarkers( layerId = elote,
      #                   data = elote,
      #                   ~long,
      #                   ~lat,
      #                   group = 'elote',
      #                   popup = ~as.character(name),
      #                   radius = 2,
      #                   color =  ~palette(food),
      #                   fillOpacity = 0.5) %>%
      # addPolygons(data = poly,
      #           ~long,
      #           ~lat,
      #           weight = 3,
      #           color = "red",
      #           group = "Restricted Zone" ,
      #           popup = "Restricted Zone")
      addLayersControl(
        overlayGroups = c("tacos","burger","elote", "Restricted Zone"),
        options = layersControlOptions(collapsed = TRUE)
      )
    
    
  })
}    

#Run the application 
shinyApp(ui = ui , server = server)

R相关问答推荐

在处理因素时,Base R grep家族比stringr变体快得多

如何根据包含相同值的某些列获取总额

如何从其他前面列中减go 特定列的平均值?

列出用m n个值替换来绘制n个数字的所有方法(i.o.w.:R中大小为n的集合的所有划分为m个不同子集)

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

找出二叉树中每个 node 在R中的深度?

如何通过判断数据框的一列来压缩另一列?

R spatstat Minkowski Sum()返回多个边界

如何在R库GoogleDrive中完全删除预先授权的Google帐户?

悬崖三角洲超大型群数计算导致整数溢出

将标识符赋给事件序列,避免错误观察

如何从向量构造一系列双边公式

如何计算R glm probit中的线性预测因子?

如何使用For-R循环在向量中找到一系列数字

在使用具有Bray-Curtis相似性的pvCluust时计算p值

如何使用字符串从重复的模式中提取多个数字?

在散点图中使用geom_point放置线图例

Ggplot2如何找到存储在对象中的残差和拟合值?

R中的Desolve:返回的导数数错误

随机生成样本,同时在R内的随机样本中至少包含一次所有值