Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为传单R中的多段线线段指定不同的颜色_R_Polyline_R Leaflet - Fatal编程技术网

如何为传单R中的多段线线段指定不同的颜色

如何为传单R中的多段线线段指定不同的颜色,r,polyline,r-leaflet,R,Polyline,R Leaflet,我有一个具有lat-long坐标的数据集。每个坐标都属于一个组,我想使用传单将它们与多段线连接起来。我试图给不同的线段赋予不同的颜色。我对传单相当陌生,所以我不知道我是否以正确的方式处理这个问题 我尝试了提供的解决方案,但结果只有一种颜色 我模拟了一个数据集来说明我的问题: #示例数据帧 lat每种颜色都需要作为单独的图层添加到地图中 library(leaflet) library(dplyr) lat <- runif(10,-10.8544921875,2.021484375) l

我有一个具有lat-long坐标的数据集。每个坐标都属于一个组,我想使用传单将它们与多段线连接起来。我试图给不同的线段赋予不同的颜色。我对传单相当陌生,所以我不知道我是否以正确的方式处理这个问题

我尝试了提供的解决方案,但结果只有一种颜色

我模拟了一个数据集来说明我的问题:

#示例数据帧

lat每种颜色都需要作为单独的图层添加到地图中

library(leaflet)
library(dplyr)

lat <- runif(10,-10.8544921875,2.021484375)
long <- runif(10,49.82380908513249,59.478568831926395)
group <- factor(c(1,1,1,1,2,2,2,1,1,1))
header <- c("lat", "long", "group")
col<-mapvalues(group,from=c(1,2),to=c("#00FF00","#FF0000")) #mannually add colors
#col<-mapvalues(group,from=c(1,2),to=substr(rainbow(2),1,7)) # programatically; looks like addpolylines wants hex not 8-digit colors
df <- data.frame(lat, long, group,col)
#colnames(df) <- header #you dont need this

map <-  leaflet(df)
map <- addTiles(map)
for( group in levels(df$group)){
  map <- addPolylines(map, lng=~long,lat=~lat,data=df[df$group==group,], color=~col)
}
map


col关于我的性能问题,下面的代码片段非常有用:


map您提到性能是一个问题,我建议使用它来进行绘图

在本例中,我绘制了100000条线,用
变量着色

设置数据 对于数据,我将原点和目标坐标放在同一行中。并使用
data.table
制作

library(data.table)

lons <- seq(-180, 180, by = 0.0001)
lats <- seq(-90, 90,by = 0.0001)
n <- 1e5
dt <- data.table(
  lon = sample(lons, size = n)
  , lat = sample(lats, size = n)
  , group = sample(c(1,2), replace = T, size = n)
)

dt[
  , `:=`(
    lon_to = shift(lon, type = "lead")
    , lat_to = shift(lat, type = "lead")
  )
]


这真是一团糟,因为我刚刚对随机点进行了采样,但你明白了。

@CrunchyTopping在发布我的问题之前,我确实仔细研究了这一点,并且我尝试了建议的解决方案(事实上,我将链接作为我尝试过的内容的一部分),但得到的线段只有一种颜色,而不是组相关的。无论如何,谢谢你调查此事!谢谢你的解释!这很有帮助。for循环仍然不能为我提供我想要的可视化效果,所以我给了每个线段一个新的数字(1,2,3,4,5,等等)。然后,我将以下代码添加到for循环:
if(as.numeric(group)%%2==0){map
col<-mapvalues(group,from=c(1,2),to=c("#FF0000","#00FF00"))
library(data.table)

lons <- seq(-180, 180, by = 0.0001)
lats <- seq(-90, 90,by = 0.0001)
n <- 1e5
dt <- data.table(
  lon = sample(lons, size = n)
  , lat = sample(lats, size = n)
  , group = sample(c(1,2), replace = T, size = n)
)

dt[
  , `:=`(
    lon_to = shift(lon, type = "lead")
    , lat_to = shift(lat, type = "lead")
  )
]
mapdeck() %>%
    add_line(
        data = dt
        , origin = c("lon","lat")
        , destination = c("lon_to", "lat_to")
        , stroke_colour = "group"
    )