R Центрирование цвета около 0, устойчивое к различным распределениям - PullRequest
0 голосов
/ 23 марта 2019

Допустим, у меня есть вектор, значения которого не центрированы вокруг 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 должен быть серым), чтобы решение было применимо к нормально и ненормально распределенным значениям?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...