Допустим, у меня есть вектор, значения которого не центрированы вокруг 0:
vector <- c(-2, 0, -3, -1.5, -1.05, 0.05)
Мой текущий способ отображения значений вектора в цвета (взятый из здесь ) не работает, так какесть предположение, что вектор центрирован по нулю:
library(RColorBrewer)
bins <- cut(vector, 9)
colorpal<-brewer.pal(8,"RdBu")
colorpal<-c(colorpal[1:4], "#FFFFFF", colorpal[5:8])
color<-colorpal[bins]
Моя первоначальная идея состояла в том, чтобы перебрать уровни bins
и найти тот, который содержит 0.
Следующая функция находитномер бина, который содержит 0:
find_bin_with_zero <- function(bins){
# create vector with c(min1, max1, min2, max2, etc.)
min_max <- unlist(strsplit(gsub("(?![,.-])[[:punct:]]", "", as.character(levels(bins)), perl=TRUE), ","))
levels_df <- data.frame(id = seq(1, length(levels(bins))),
min = min_max[seq(1, length(min_max), by=2)],
max = min_max[seq(2, length(min_max), by=2)])
for (i in 1:nrow(levels_df)){
row <- levels_df[i, ]
# convert from factor to numeric
min <- as.numeric(levels(row$min))[row$min]
max <- as.numeric(levels(row$max))[row$max]
if (min < 0 && max >= 0){
return(i)
}
}
}
Я не знаю, как поступить с этой точки.Есть ли более быстрый способ центрировать вектор цветов вокруг 0 (0 должен быть серым), чтобы решение было применимо к нормально и ненормально распределенным значениям?