【问题标题】:Add gradient color to polyline in leaflet R将渐变颜色添加到传单 R 中的折线
【发布时间】:2019-04-17 15:40:18
【问题描述】:

我似乎找不到任何方法使传单路径成为基于另一个变量的渐变。对于使用下面的 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))

【问题讨论】:

  • 您期望的结果是什么 - 40 个片段中的每一个都是不同的颜色,或者,每个片段都有渐变填充?
  • 我猜更像前者,每个段都有不同的颜色。但实际上我的想法就像在 ggplot2 中一样,您可以根据另一个连续变量为路径着色。所以它变成了沿路径的渐变色。
  • 您需要为每个段创建一个单独的“行”,类似于in this question and answer 的方法。然后,您可以分别为每个段/线着色。

标签: r leaflet


【解决方案1】:

聚会有点晚了,但正如 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

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多