2017-01-23 9 views
1

Меня попросили получить график корреляции для colaborator. Мой выбор - использовать R для задачи, в частности, corrplot. Я исследовал в Интернете и I found multiple ways to obtain such graphics, но не конкретную графику, на которую меня попросили (как вы можете видеть на картинке, значимые значения подсвечиваются путем рисования квадрата вокруг значительной плитки), что меня озадачивает.Как нарисовать линию вокруг значимых значений в пакете corrplot R

Example of the correlation plot required

Ближайший результат я достигаю использую код под этой линией, но я, кажется, не быть в состоянии найти возможность нарисовать линию вокруг значительных плиток (если есть).

#Insignificant correlations are leaved blank 
corrplot(res3$r, type="upper", order="hclust", 
     p.mat = res3$P, sig.level = 0.01, insig = "blank") 

Я попытался добавить параметр «addrect», но это не сработало.

#Insignificant correlation are crossed 
corrplot(res3$r, type="upper", order="hclust", p.mat = res3$P, 
     addrect=2, sig.level = 0.01, insig = "blank") 

Любая помощь будет оценена по достоинству.

+0

Вы можете найти, какие ячейки должны иметь границу, измененную путем проверки матрицы pvalue, а затем применить это решение: http://stackoverflow.com/questions/40538304/how-to-colourise-some-cell-borders -in-r-corrplot (ps addrect относится к кластеризации) – user20650

+0

Спасибо за ваш ответ user20650 – JLLavin

ответ

0

corrplot позволяет добавлять новые сюжеты в уже существующую. Поэтому, как только вы создали график исходной матрицы корреляции, вы можете просто добавить те ячейки, которые вы хотите выделить в итеративном порядке, используя corrplot(..., add = TRUE).

Единственное, что требуется для достижения вашей цели, - это индексы vecor (которые я назвал «идентификаторы»), чтобы рассказать R, какие ячейки выделяются. Обратите внимание, что из соображений простоты я взял случайную sample исходной матрицы корреляции, но такие вещи, как ids <- which(p.value < 0.01) (при условии, что вы сохранили уровни значимости в отдельном векторе), будут работать аналогичным образом.

library(corrplot) 

## create and visualize correlation matrix 
data(mtcars) 
M <- cor(mtcars) 

corrplot(M, cl.pos = "n", na.label = " ") 

## select cells to highlight (e.g., statistically significant values) 
set.seed(10) 
ids <- sample(1:length(M), 15L) 

## duplicate correlation matrix and reject all irrelevant values 
N <- M 
N[-ids] <- NA 

## add significant cells to the initial corrplot iteratively 
for (i in ids) { 
    O <- N 
    O[-i] <- NA 
    corrplot(O, cl.pos = "n", na.label = " ", addgrid.col = "black", add = TRUE, 
      bg = "transparent", tl.col = "transparent") 
} 

corrplot

Обратите внимание, что вы можете также добавить все значения, чтобы выделить в один присест (то есть, не требуя for петли) с помощью corrplot(N, ...), но в этом случае нежелательный черный запас обращается вокруг область печати.

 Смежные вопросы

  • Нет связанных вопросов^_^