Изменение цветовой схемы корреляционной матрицы для запуска с указанной цветовой метки - PullRequest
1 голос
/ 24 сентября 2019

У меня есть набор данных, где самый низкий коэффициент корреляции составляет 0,83, а самый высокий - около 0,99.Я использую пакет "corrplot" в R и пытаюсь получить спектр цветов, используя пакет "colorRamps".Я также хочу, чтобы самый конец спектра начинался с моих указанных верхнего и нижнего пределов (0,8, 1).Я посмотрел почти везде, но не могу найти решение.Я также не могу загрузить желаемую цветовую схему.

Я успешно использовал colorRampPalette, но все еще не могу получить начало и конец цветового спектра для начала и конца в указанных пределах.

Вот что я пробовал:

library(corrplot)
library(colorRampPalette)
library(colorRamps)

pal <- colorRamps::matlab.like2


###########Notice my cl.lim is set to 0.8-1################

corrplot(data, method = "number", type="lower", is.corr=FALSE, margin=c(0,0,0,0),col=pal, tl.col='black', cl.lim = c(0.8, 1),tl.cex=0.7, outline=TRUE, title = "9 DAT")

После запуска строки кода "corrplot" я получаю следующее:

"Warning messages:
1: In text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt = tl.srt,  :
  "margin" is not a graphical parameter
2: In text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col = tl.col,  :
  "margin" is not a graphical parameter
3: In title(title, ...) : "margin" is not a graphical parameter"

Мой график также не работаетгенерировать.

Я был бы очень признателен за помощь.Спасибо всем!

1 Ответ

1 голос
/ 25 сентября 2019

Я использую ggplot2 для построения.Итак, позвольте мне показать вам, как достичь того, что вам нужно в ggplot2.Давайте сначала сгенерируем правильную матрицу корреляции:

library(ggplot2)
library(tidyr)
library(ggplot2)

set.seed(123)

df <- data.frame(X1 = 1:100,
                 X2 = 0.75*(1:100) + rnorm(100),
                 X3 = 0.25*(1:100) + rnorm(100,sd = 20),
                 X4 = 0.5*(1:100) + rnorm(100,sd = 10))

cm <- round(cor(df), 2)
cm[lower.tri(cm)] <- NA

cm <- as.data.frame(cm) %>% 
  mutate(Var1 = factor(row.names(.), levels=row.names(.))) %>% 
  gather(key = Var2, value = value, -Var1, na.rm = TRUE, factor_key = TRUE)

Вывод

# Var1 Var2 value
# 1    X1   X1  1.00
# 5    X1   X2  1.00
# 6    X2   X2  1.00
# 9    X1   X3  0.43
# 10   X2   X3  0.43
# 11   X3   X3  1.00
# 13   X1   X4  0.86
# 14   X2   X4  0.85
# 15   X3   X4  0.38
# 16   X4   X4  1.00

Теперь предположим, что кто-то хочет построить эту матрицу корреляции, используя ggplot2:

ggplot(data = cm) + 
  geom_tile(aes(Var2, Var1, fill = value)) +
  scale_fill_gradientn(colours = rainbow(5))

enter image description here

Диапазон цветов по умолчанию - range(cm$value), т. Е. Он охватывает весь диапазон целевой переменной.Предположим, что кто-то хочет использовать диапазон [0,5, 0,9].Этого нельзя достичь простым изменением переменной limits - простое использование limits приведет к появлению серых областей на вашем графике.Для этого можно использовать параметр oob = scales::squish (подробнее о том, что он делает):

ggplot(data = cm) + 
  geom_tile(aes(Var2, Var1, fill = value)) +
  scale_fill_gradientn(colours = rainbow(5), limits = c(0.5, 0.9),
                       oob = scales::squish)

enter image description here

Это обеспечит правильное отображение цветовс учетом нового диапазона.

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