闪亮R - 根据条件定制标记

时间:2017-11-21 11:04:31

标签: r shiny leaflet

我想知道是否可以在makeIcon()函数中添加条件

我有一张桌子:

id ; lat ; long ; class1 ; class2 ; class3

我希望图标根据这些条件而有所不同:

if class1 == A, I want image1 
else, if class2 == B, I want image2
else, if class3 == C, I want image 3
else, I want image4

1 个答案:

答案 0 :(得分:1)

makeIcon()内,可能不是。从API文档:

  

对于将单个图标应用于一组标记的简单情况,请使用   makeIcon()。 (this one

你可能想使用icon()这是一个图标矢量,你可以用它来绘制不同数据的不同图标:

  

如果你有几个要申请的图标,只有几个不同   参数(即它们共享相同的大小和锚点但具有   不同的URL),使用icons()函数。

图标包含一个带有每个图标图像网址的向量(或者数据之间不同的任何其他图标属性)。

要做逻辑,最好将额外的两个ifelse语句嵌套到图标函数中,例如:

  iconUrl = ifelse(df$class1  == "a", "image1",
     ifelse(df$class2 == "c", "image2",
        ifelse(df$class3 =="x", "image3", 
           "some other url" #the else condition
                    )
            )
  ),

这是一个最小的示例,它只是链接到api文档中的示例的一小部分内容:

library(leaflet)

lat<- c(57,65,60,61)
long<-c(-130,-125,-140,-135)
class1<-c("a","b","c","d")
class2<-c("b","c","d","e")
class3<-c("b","c","d","f")


df <- data.frame(lat,long,class1,class2,class3,stringsAsFactors=FALSE)

leafIcons <- icons(
  iconUrl = ifelse(df$class1  == "a", "http://leafletjs.com/examples/custom-icons/leaf-green.png",
    ifelse(df$class2 == "c", "http://leafletjs.com/examples/custom-icons/leaf-red.png",
      ifelse(df$class3 == "d", "http://leafletjs.com/examples/custom-icons/leaf-orange.png",
             "http://leafletjs.com/docs/images/logo.png"
             )            
     )
  ),      
  iconWidth = 38, iconHeight = 95,
  iconAnchorX = 22, iconAnchorY = 94,
  shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png",
  shadowWidth = 50, shadowHeight = 64,
  shadowAnchorX = 4, shadowAnchorY = 62
)

leaflet(data = df) %>% addTiles() %>%
  addMarkers(~long, ~lat, icon = leafIcons)

对不起,这个图片的选择并不是很棒。如果您想根据每个图标的数据,图标大小等其他属性而有所不同,您可以在iconWidth和/或iconHeight上使用相同的过程:

  iconHeight = ifelse(df$class1  == "a", 100,
    ifelse(df$class2 == "c", 200,
      ifelse(df$class3 == "d", 300,
             400
        )            
     )
  ),