将渐变颜色添加到小册子R中的折线

时间:2018-06-11 21:28:36

标签: r leaflet

我似乎无法找到任何方法使传单路径成为基于另一个变量的渐变。对于使用下面的lat / lng对的给定数据帧:

df <- data.frame(lat = lat, lng = lng, var = c(1:25))

因此传单图应如下所示:

leaflet() %>% 
addTiles() %>% 
      addPolylines(data = df, lng = ~lng, lat = ~lat, 
                   color = ~var)

但这只会使整条路径的颜色相同。

即使我这样做:

pal <- colorNumeric(
  palette = "Blues",
  domain = df$var)

leaflet() %>% 
    addTiles() %>% 
          addPolylines(data = df, lng = ~lng, lat = ~lat, 
                       color = ~pal(var))

这也不起作用。

可重复的例子:

df <- data.frame(lat = rnorm(40) * 2 + 13, 
                 lng = rnorm(40) + 48, 
                 var = c(1:40))

pal <- colorNumeric(
  palette = "Blues",
  domain = df$var)

leaflet() %>% 
  addTiles() %>% 
  addPolylines(data = df, lng = ~lng, lat = ~lat, 
               color = ~pal(var))

All same color lines

1 个答案:

答案 0 :(得分:0)

聚会晚了一点,但是正如SymbolixAU所写,数据集中的每一行都需要一个单独的折线。完整示例如下:

library(leaflet)
library(dplyr)
library(grDevices)

set.seed(1234)
df <- data.frame(lat = rnorm(40) * 2 + 13, 
                 lng = rnorm(40) + 48, 
                 var = c(1:40))

gradientFunction <- colorRampPalette(c("white", "blue"))
colorGradient <- gradientFunction(dim(df)[1])

df1 <- df %>%
  mutate(nextLat = lead(lat),
         nextLng = lead(lng),
         color = colorGradient
         )

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

for (i in 1:nrow(df1)) {
  gradient_map <- addPolylines(map = gradient_map,
                               data = df1, 
                               lng = as.numeric(df1[i, c('lng', 'nextLng')]), 
                               lat = as.numeric(df1[i, c('lat', 'nextLat')]), 
                               color = as.character(df1[i, c('color')])
  )
}

gradient_map

Screenshot