R Shining应用程序中的传单地图图例没有';不显色

R Shining应用程序中的传单地图图例没有';不显色,r,shiny,leaflet,R,Shiny,Leaflet,当我尝试将图例添加到包含在闪亮应用程序中的传单贴图(使用软件包)的传单贴图时,图例不会显示调色板的颜色。相反,它只显示为NA值指定的颜色,在本例中为白色 该应用程序执行以下操作: 首先,它根据用户输入过滤一组数据 然后,它根据过滤后的数据生成一个choropleth映射 这是我用来制作图例的代码: addLegend(position = "bottomleft", pal = pal, values = shp.data()$stat.selected, title = "L

当我尝试将图例添加到包含在闪亮应用程序中的传单贴图(使用软件包)的传单贴图时,图例不会显示调色板的颜色。相反,它只显示为NA值指定的颜色,在本例中为白色

该应用程序执行以下操作:

  • 首先,它根据用户输入过滤一组数据
  • 然后,它根据过滤后的数据生成一个choropleth映射
这是我用来制作图例的代码:

addLegend(position = "bottomleft",
   pal = pal, values = shp.data()$stat.selected,
   title = "Legend",
   opacity = .5)
其中,
pal
是分位数调色板,如下所示

pal <-colorQuantile(c("#B2FF66","#66CC00","#4C9900","#336600","#193300"),
                    NULL, n = 5, na.color="#FFFFFF")
我最初尝试按照R页传单上的示例制作图例,并将参数
values=~stat.selected
用于
addLegend
函数,但出现了以下错误:

Error in UseMethod("doResolveFormula") : 
  no applicable method for 'doResolveFormula' applied to an object of class "NULL"

我可以通过更改引用
AddLegend
函数参数中的值列的方式来显示颜色。我将
stat.selected
变量放在双括号中,这似乎解决了问题:

addLegend(position = "bottomleft",
          pal = pal, values = shp.data()[[stat.selected]],
          title = "Legend",
          opacity = 1
          )
为澄清起见,
stat.selected
变量来自以下开关语句:

 stat.selected <- isolate(switch(input$var.stat,
                                "Total employment" = "tot_emp",
                                "Mean annual wage" = "a_mean",
                                "Mean hourly wage" = "h_mean",
                                "Location quotient" = "loc_quotient"
)

stat.selected之前,我只有一个简单的片段,演示了如何添加图例。我没有按照规范使用图例值之前的~值。我做了传统的dataframe$列,它工作得很好

现在对其进行了更新,以了解它们是如何组合在一起的。这里是在创建所有变量切割等之后运行的完整映射。最终清理的数据帧称为zipData

# create a full popup
# add some HTML for editing the styles

zipData$popUp <- paste('<strong>',zipData$Street, '</strong><br>',
                       'TIV = $',prettyNum(zipData$tiv, big.mark = ',',preserve.width = 'none'), '<br>',
                       'City: ', zipData$city, '<br>',
                       'YrBuilt = ', zipData$YearBuilt, '<br>',
                       'Construction = ', zipData$ConstructionCode, '<br>',
                       'Occupancy = ', zipData$OccupancyCode, '<br>',
                       'Premium = $' , prettyNum(zipData$Premium, big.mark = ',',preserve.width = 'none') , '<br>',
                       'GrossArea = ', prettyNum(zipData$GrossArea, big.mark = ',', preserve.width = 'none'), '<br>', 
                       'RoofYr = ', zipData$RoofYearBuilt, '<br>')

# set color scale for key factor
colorsConst <- colorFactor(rainbow(4), zipData$ConstructionCode)

# color scales for numerical bins
colorstivValue <- colorFactor(palette = 'Accent', zipData$tivValueLvl)
colorsYrBuilt <- colorFactor(palette = 'Spectral', zipData$yrBuiltLvl)
colorsRoofYrBuilt <- colorFactor(palette = "YlOrRd", zipData$roofYrBuiltLvl)


# begin the leaflet map construction
# create the map opbject

m <- leaflet() %>%
    addTiles() %>%

# add different tiles for different color schemes

    addProviderTiles(providers$OpenStreetMap, group = 'Open SM')  %>%
    addProviderTiles(providers$Stamen.Toner, group = 'Toner')  %>%
    addProviderTiles(providers$CartoDB.Positron, group = 'CartoDB')  %>%
    addProviderTiles(providers$Esri.NatGeoWorldMap, group = 'NG World') %>%
    setView(lng = -90, lat = 30, zoom = 10) %>%

##############################

    # this section is for plotting the variables
    # each variable below is a layer in the map

    # construction
    addCircleMarkers(data = zipData, lat = ~Lat, lng = ~Lon,
                     color = ~colorsConst(ConstructionCode), popup = zipData$popUp,
                     radius = 5, group = 'Construction') %>%
    # tiv
    addCircleMarkers(data = zipData, lat = ~Lat, lng = ~Lon, 
                     color = ~colorstivValue(tivLvl), popup = zipData$popUp,
                     radius = ~tiv/20000, group = 'Bldg Value') %>%

    # year built  
    addCircleMarkers(data = zipData, lat = ~Lat, lng = ~Lon, 
                     color = ~colorsYrBuilt(yrBuiltLvl), popup = zipData$popUp,
                     radius = ~YearBuilt/250, group = 'Yr Built') %>%


######################################

    # layer control

    addLayersControl(
        baseGroups = c('Open SM', 'Toner', 'Carto DB', 'NG World'),

        overlayGroups = c('Construction',
                          'TIV',
                          'Yr Built'
        ),
        options = layersControlOptions(collapsed = F)
    ) %>%


#################################################       
add the legends for each of the variables


    # construction        
    addLegend('bottomright', pal = colorsConst, values = zipData$ConstructionCode,
              title = 'Construction Code',
              opacity = 1) %>%

     # tiv 
    addLegend('bottomleft', pal = colorstivValue, values = zipData$tivLvl,
              title = 'TIV',
              opacity = 1) %>%

    # year built
    addLegend('topleft', pal = colorsYrBuilt, values = zipData$yrBuiltLvl,
              title = 'Yr Built',
              opacity = 1)


m  # Print the map
#创建一个完整的弹出窗口
#添加一些用于编辑样式的HTML
zipData$弹出窗口%
设置视图(lng=-90,纬度=30,缩放=10)%>%
##############################
#本节用于绘制变量
#下面的每个变量都是地图中的一个图层
#建筑
addCircleMarkers(数据=zipData,lat=~lat,lng=~Lon,
color=~colorsConst(构造代码),popup=zipData$popup,
半径=5,组='构造')%>%
#电视录像机
addCircleMarkers(数据=zipData,lat=~lat,lng=~Lon,
color=~colorstivValue(tivLvl),popup=zipData$popup,
半径=~tiv/20000,组=‘建筑价值’)%>%
#建成年份
addCircleMarkers(数据=zipData,lat=~lat,lng=~Lon,
color=~colorsyrbuilded(yrBuiltLvl),popup=zipData$popup,
半径=~YearBuild/250,组='Yer Build')%>%
######################################
#层控制
添加层控件(
baseGroups=c(‘打开SM’、‘碳粉’、‘卡通DB’、‘NG World’),
overlayGroups=c('Construction',
"TIV",,
“你造的”
),
选项=图层控制选项(折叠=F)
) %>%
#################################################       
为每个变量添加图例
#建筑
addLegend('bottomright',pal=colorsConst,values=zipData$ConstructionCode,
标题=‘施工规范’,
不透明度=1)%>%
#电视录像机
addLegend('bottomleft',pal=colorstivValue,values=zipData$tivlvlvl,
标题='TIV',
不透明度=1)%>%
#建成年份
addLegend('topleft',pal=ColorSyrBuild,values=zipData$yrBuiltLvl,
标题='Yr BUILED',
不透明度=1)
打印地图
地图的一部分如下所示


我收到了同样的信息

Error in UseMethod("doResolveFormula") : no applicable method for 'doResolveFormula' applied to an object of class "NULL" 

  • 在添加元素时:

    data <- data.frame(lng1 = c(1, 2, 3), 
                   lng2 = c(2, 3, 4), 
                   lat1 = c(1, 2, 3), 
                   lat2 = c(2, 3, 4), 
                   values = c(1, 2, 3))
    
    pal_grid <- colorNumeric(palette = "YlGn", domain = data$values)
    
    leaflet() %>% 
      addRectangles(data = data,
                lng1 = data$lng1, lat1 = data$lat1, 
                lng2 = data$lng2, lat2 = data$lat2, 
                fillColor = ~pal_grid(data$values),
                fillOpacity = 0.2,
                weight = 2, opacity = 0.5)`
    

    帮助页面中的数据:如果为NULL,则无论何时调用结果颜色函数,x值都将表示域。这意味着如果函数被多次调用,值和颜色之间的编码可能不一致;如果需要一致性,则必须提供非空域。也许更改NULL会有所帮助?图例只能在传单()调用包含数据时使用~;如果让传单()调用数据,则所有层都可以使用它。按照这种编写方式,实际上只有addCircleMarkers调用被赋予数据,因为它只被传递到该层。正如Joe所指出的,Bryan的示例即使使用
    ~login
    也会成功,只要他使用
    传单(zipData)%%>%
    而不是
    传单()
    事实上,我甚至可以用
    NA
    制作一个非常好的例子,只要
    传单()
    以时尚
    传单(我的数据)
    的方式随数据集一起提供。
        data <- data.frame(lng1 = c(1, 2, 3), 
                       lng2 = c(2, 3, 4), 
                       lat1 = c(1, 2, 3), 
                       lat2 = c(2, 3, 4), 
                       values = c(1, 2, 3))
    
        pal_grid <- colorNumeric(palette = "YlGn", domain = data$values)
    
        leaflet() %>% 
          addRectangles(lng1 = data$lng1, lat1 = data$lat1, 
                    lng2 = data$lng2, lat2 = data$lat2, 
                    fillColor = ~pal_grid(data$values),
                    fillOpacity = 0.2,
                    weight = 2, opacity = 0.5)
    
    data <- data.frame(lng1 = c(1, 2, 3), 
                   lng2 = c(2, 3, 4), 
                   lat1 = c(1, 2, 3), 
                   lat2 = c(2, 3, 4), 
                   values = c(1, 2, 3))
    
    pal_grid <- colorNumeric(palette = "YlGn", domain = data$values)
    
    leaflet(data = data) %>% 
      addRectangles(lng1 = data$lng1, lat1 = data$lat1, 
                lng2 = data$lng2, lat2 = data$lat2, 
                fillColor = ~pal_grid(data$values),
                fillOpacity = 0.2,
                weight = 2, opacity = 0.5)
    
    data <- data.frame(lng1 = c(1, 2, 3), 
                   lng2 = c(2, 3, 4), 
                   lat1 = c(1, 2, 3), 
                   lat2 = c(2, 3, 4), 
                   values = c(1, 2, 3))
    
    pal_grid <- colorNumeric(palette = "YlGn", domain = data$values)
    
    leaflet() %>% 
      addRectangles(data = data,
                lng1 = data$lng1, lat1 = data$lat1, 
                lng2 = data$lng2, lat2 = data$lat2, 
                fillColor = ~pal_grid(data$values),
                fillOpacity = 0.2,
                weight = 2, opacity = 0.5)`