我正在尝试使用传单包在地图中使用看起来像这样的数据着色:
+--------+---------+-------+
| region | terrain | sales |
+--------+---------+-------+
| 1 | 1A | 253 |
| 1 | 1B | 280 |
| 1 | 1C | 360 |
| 1 | 1D | 350 |
| 1 | 1E | 335 |
| 1 | 1F | 275 |
| 2 | 2A | 200 |
| 2 | 2B | 300 |
| 2 | 2C | 400 |
| 2 | 2D | 250 |
| 2 | 2E | 350 |
+--------+---------+-------+
虽然我知道如何基于一个变量创建调色板,但我想基于每个“父”变量创建一个调色板。
因此,假设我想要1 = "Reds"
和2 = "Blues"
,但是在这两种“父”颜色内,然后我希望这些区域内的所有地形都根据销售情况进行阴影处理?
答案 0 :(得分:2)
您可以使用ERROR, Could not open test.file
为矢量/数据列生成特定的颜色
library(colourvalues)
## using a known / reproducible data object
df <- mapdeck::capitals
## making a 'region' column to represent your data
df$region <- ifelse( tolower( substr(df$country,1,1) ) %in% letters[1:13], 1, 2 )
## a random 'sales' column
df$sales <- rnorm(n = nrow(df) )
library(colourvalues)
## order the data first so we can simply `<- c()` the result
df <- df[with(df, order(region)), ]
region1 <- colour_values( x = df[ df$region == 1, "sales"], palette = "reds" )
region2 <- colour_values( x = df[ df$region == 2, "sales"], palette = "blues")
df$colours <- c(region1, region2)
答案 1 :(得分:1)
这不是显式使用leaflet
,而是使用RColorBrewer
(导入传单)
此功能将按给定的第一列拆分数据帧,并依次为每个第二个颜色赋予每个Pals颜色。
最后,我已将其分配给一列,但您可能想要不同地使用它。
library(RColorBrewer)
library(dplyr)
createCustomPalette <- function(df, parentCol = "region",subCol = "terrain",
Pals = c("Blues", "Reds", "Greens", "Greys", "Oranges", "Purples"),
returnDF = FALSE){
Parents <- as.numeric(unique(df[[parentCol]]))
ParCols <- lapply(seq_along(Parents), function(x)
RColorBrewer::brewer.pal(length(unique(df[df[parentCol]==Parents[x],subCol])), Pals[x]))
Cols <- unlist(ParCols)
Colsdf <- data.frame(Col = Cols, sub = unlist(lapply(Parents, function(x) unique(df[df[[parentCol]]==x,][[subCol]]))),
stringsAsFactors = F)
outdf <- dplyr::right_join(Colsdf,df, by = c("sub"=subCol))
# outdf <- merge(df, Colsdf, by.x = subCol, by.y = "sub", all.x = T, sort = FALSE )
if(returnDF){
return(outdf)
}else{
return(outdf$Col)
}
}
mydf$Cols <- createCustomPalette(mydf)
scales::show_col(mydf$Cols)
我试图避免使用dplyr
,因为我不想添加新的库,但是合并和维护行顺序(这对于获取颜色很重要)对于使用R来说很痛苦。不想使用dplyr
,只需添加行号并合并然后排序即可。