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