Настраиваемый цвет графика корреляции

Есть ли способ настроить график корреляции в R, например, на следующем графике  введите описание изображения здесь

Я хочу иметь другое значение цвета, например, если значение находится в диапазоне от 0,5 до 0,7, тогда сделайте его зеленым и ниже, чтобы оно было синим, а выше 0,7 оставьте красным

Я использовал приведенный ниже код для корреляционного графика

library(corrplot)
data_matrix<-as.matrix(data)
corr_mat=cor(data_matrix,method="pearson")
corrplot(corr_mat,method = "number")


person Dexter1611    schedule 17.08.2020    source источник
comment
вам нужны однотонные цвета или с градиентом? Вы имеете в виду 0,5 и 0,7 по абсолютной величине? или хотите, чтобы все негативы были синими? вам нужно, чтобы отображались числа или только квадраты / круги?   -  person Edo    schedule 18.08.2020
comment
Возможный дубликат. Вы смотрели ответ здесь?   -  person Allan Cameron    schedule 18.08.2020


Ответы (1)


Лучше ggplot. Настроить проще.

При необходимости измените размер текста с помощью дополнительного аргумента size внутри geom_text.

# given a correlation matrix
corr_matrix <- cor(mtcars)

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

corr_matrix %>% 
  as_tibble(rownames = "var1") %>% 
  gather(var2, value, -var1) %>% 
  
  ggplot(aes(x = var1, y = var2, fill = value)) +
  geom_tile() +
  geom_text(aes(label = round(value, digits = 2))) +
  labs(x = "", y = "", fill = "Corr", title = "Correlation Matrix") +
  coord_fixed() +
  theme_minimal() +
  scale_fill_gradientn(
        limits = c(-1,1),

        # here choose the colours you want
        colours = c("blue", "green", "red"), 

        # here choose the intervals you want (must be inside rescale!)
        values = scales::rescale(c(-1, 0.5, 0.7, 1)))

введите описание изображения здесь

Просто с числами [лично я бы выбрал первый]

corr_matrix %>% 
  as_tibble(rownames = "var1") %>% 
  gather(var2, value, -var1) %>% 
  
  ggplot(aes(x = var1, y = var2, colour = value)) +
  geom_tile(colour = "gray20", fill = "white") +
  geom_text(aes(label = round(value, digits = 2))) +
  labs(x = "", y = "", fill = "Corr", title = "Correlation Matrix") +
  coord_fixed() +
  theme_minimal() +
  scale_colour_gradientn(colours = c("blue", "green", "red"),
                       values = scales::rescale(c(-1, 0.5, 0.7, 1)),
                       limits = c(-1,1))

введите описание изображения здесь


РЕДАКТИРОВАТЬ

Я добавил это, чтобы решить проблему, связанную с сортировкой этикеток.

Прежде всего, я отредактирую mtcars, чтобы он выглядел как ваши данные.

colnames(mtcars) <- paste0("Month", 1:11)
mtcars$Month12 <- rnorm(32)

Хорошо, теперь приступим к графику. Нам просто нужно внести небольшое изменение: мы сделаем имена переменных упорядоченными факторами.

corr_matrix <- cor(mtcars)

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

corr_matrix %>% 
    as_tibble(rownames = "var1") %>% 
    gather(var2, value, -var1) %>% 
    
    # here is the additional line you need!
    mutate(across(c(var1, var2), factor, levels = paste0("Month", 1:12), ordered = TRUE)) %>% 
    
    ggplot(aes(x = var1, y = var2, fill = value)) +
    geom_tile() +
    geom_text(aes(label = round(value, digits = 2))) +
    labs(x = "", y = "", fill = "Corr", title = "Correlation Matrix") +
    coord_fixed() +
    theme_minimal() +
    scale_fill_gradientn(
        limits = c(-1,1),
        
        # here choose the colours you want
        colours = c("blue", "green", "red"), 
        
        # here choose the intervals you want (must be inside rescale!)
        values = scales::rescale(c(-1, 0.5, 0.7, 1)))

введите описание изображения здесь

Работает с dplyr версией ›= 1.0.0.

Если у вас его нет, используйте вместо этого:

  mutate_at(c("var1", "var2"), factor, levels = paste0("Month", 1:12), ordered = TRUE) %>% 
person Edo    schedule 17.08.2020
comment
Спасибо, Эдо, я очень благодарен за решение, которое я могу создать, но метки не синхронизированы, например, это должен быть Месяц1, Месяц2 .... Месяц12 в этом порядке. Ссылка на изображение для созданного графика i.imgur.com/9YBtyui.png - person Dexter1611; 18.08.2020
comment
@ Edo, пробовал использовать reorder, но этикетка не устраивается, вы можете мне помочь. Ниже то, что я пробовал, но он не выходит должным образом ggplot (aes (x = reorder (var1, desc (-var1)), y = reorder (var2, desc (var2)), fill = value)) - person Dexter1611; 18.08.2020
comment
ссылка после добавления переупорядочить ggplot (aes (x = reorder (var1, -desc (var1)), y = reorder (var2, desc (var2)), fill = value)) imgur.com/Zw6RXdu - person Dexter1611; 18.08.2020
comment
хорошо, посмотри на мою правку. Вам нужно превратить его в фактор и отсортировать уровни вручную. Это путь. - person Edo; 18.08.2020
comment
получение ошибки Ошибка в (c (var1, var2), factor, levels = paste0 (Month, 1:12),: не удалось найти функцию в - person Dexter1611; 18.08.2020
comment
Я уже писал об этом в своем ответе: если не работает, значит, у вас слишком старая версия dplyr. Просто используйте другое решение, которое я написал внизу. - person Edo; 18.08.2020