dyRibbon 中的调色板颜色顺序是什么?
what is the sequence of palette color in dyRibbon?
使用 R 中 dygraphs
包的 dyRibbon
函数围绕 reprex 考虑这些问题。
Q1。为什么 3 色带展示需要 4 种颜色?为什么第一个总是被忽略?
Q2。色带调色板的顺序是如何分配给每个数值的?它肯定不是按照您将在下面的 reprex 中看到的数字顺序
library(data.table)
library(dygraphs)
library(RColorBrewer)
library(dplyr)
set.seed(12)
# create data
dt1 <- data.table(t = seq(Sys.time(),by = "1 sec", length.out = 10),
y = rnorm(10,20,5))
# add a column with 3 possible values to be used for dyRibbon
dt1[,flag1:=factor(dplyr::case_when(y>22 ~ "high",y>18 ~ "med", T ~ "low"))]
dt1[,rflagn:=as.numeric(flag1)]
# generate the dygraph with a 3 color ribbon
dyg1 <-
dt1 %>%
select(t,y) %>%
dygraph(main = "Reprex to show color sequence") %>%
dyOptions(drawPoints = T,pointSize = 5,drawGapEdgePoints = T,
strokeWidth = 4,strokeBorderWidth = 1) %>%
dyRibbon(dt1$rflagn/4,palette = brewer.pal(4,"Set1"))
# checkout the reprex graph paying attention to the sequence of colors
dyg1
# check the sequence of colors in the palette
display.brewer.pal(4,"Set1")
# check the actual values in first 10 rows
dt1
#> t y flag1 rflagn
#> 1: 2022-05-18 21:47:10 12.59716 low 2
#> 2: 2022-05-18 21:47:11 27.88585 high 1
#> 3: 2022-05-18 21:47:12 15.21628 low 2
#> 4: 2022-05-18 21:47:13 15.39997 low 2
#> 5: 2022-05-18 21:47:14 10.01179 low 2
#> 6: 2022-05-18 21:47:15 18.63852 med 3
#> 7: 2022-05-18 21:47:16 18.42326 med 3
#> 8: 2022-05-18 21:47:17 16.85872 low 2
#> 9: 2022-05-18 21:47:18 19.46768 med 3
#> 10: 2022-05-18 21:47:19 22.14007 high 1
我在 rstudio 社区找到了答案。解决方案是必须明确定义序列。
data_arg <- dt1 %>%
mutate(flagn = case_when(
flag1 == "low" ~ 0,
flag1 == "med" ~ 0.5,
flag1 == "high" ~ 1)) %>%
pull(flagn)
定义后,我们将其传递给 dyRibbon
。
...
dyRibbon(data = data_arg, palette = brewer.pal(3,"Set1"))
所以我依赖于可能是任意的因子的默认序列。最好明确定义数据参数。
使用 R 中 dygraphs
包的 dyRibbon
函数围绕 reprex 考虑这些问题。
Q1。为什么 3 色带展示需要 4 种颜色?为什么第一个总是被忽略?
Q2。色带调色板的顺序是如何分配给每个数值的?它肯定不是按照您将在下面的 reprex 中看到的数字顺序
library(data.table)
library(dygraphs)
library(RColorBrewer)
library(dplyr)
set.seed(12)
# create data
dt1 <- data.table(t = seq(Sys.time(),by = "1 sec", length.out = 10),
y = rnorm(10,20,5))
# add a column with 3 possible values to be used for dyRibbon
dt1[,flag1:=factor(dplyr::case_when(y>22 ~ "high",y>18 ~ "med", T ~ "low"))]
dt1[,rflagn:=as.numeric(flag1)]
# generate the dygraph with a 3 color ribbon
dyg1 <-
dt1 %>%
select(t,y) %>%
dygraph(main = "Reprex to show color sequence") %>%
dyOptions(drawPoints = T,pointSize = 5,drawGapEdgePoints = T,
strokeWidth = 4,strokeBorderWidth = 1) %>%
dyRibbon(dt1$rflagn/4,palette = brewer.pal(4,"Set1"))
# checkout the reprex graph paying attention to the sequence of colors
dyg1
# check the sequence of colors in the palette
display.brewer.pal(4,"Set1")
# check the actual values in first 10 rows
dt1
#> t y flag1 rflagn
#> 1: 2022-05-18 21:47:10 12.59716 low 2
#> 2: 2022-05-18 21:47:11 27.88585 high 1
#> 3: 2022-05-18 21:47:12 15.21628 low 2
#> 4: 2022-05-18 21:47:13 15.39997 low 2
#> 5: 2022-05-18 21:47:14 10.01179 low 2
#> 6: 2022-05-18 21:47:15 18.63852 med 3
#> 7: 2022-05-18 21:47:16 18.42326 med 3
#> 8: 2022-05-18 21:47:17 16.85872 low 2
#> 9: 2022-05-18 21:47:18 19.46768 med 3
#> 10: 2022-05-18 21:47:19 22.14007 high 1
我在 rstudio 社区找到了答案。解决方案是必须明确定义序列。
data_arg <- dt1 %>%
mutate(flagn = case_when(
flag1 == "low" ~ 0,
flag1 == "med" ~ 0.5,
flag1 == "high" ~ 1)) %>%
pull(flagn)
定义后,我们将其传递给 dyRibbon
。
...
dyRibbon(data = data_arg, palette = brewer.pal(3,"Set1"))
所以我依赖于可能是任意的因子的默认序列。最好明确定义数据参数。