То, что вы хотите, кажется невозможным с corrplot
, если вы не взломаете его немного. Я просто добавил новый параметр size_vector
, который используется при рисовании кругов. См. https://github.com/johannes-titz/corrplot/commit/9362f6a7c2fda794b5ef8895b77f0b2ff979092a для измененных строк.
# install the hacked version
devtools::install_github("johannes-titz/corrplot@size_parameter")
library(corrplot)
data(mtcars)
M <- cor(mtcars)
# get p values
p_vals_mat <- cor.mtest(mtcars)$p
corrplot(M, size_vector = 1-as.numeric(p_vals_mat))
Обратите внимание, что я использовал 1-p для размера ( малые значения р дают большие круги). Вы можете использовать любое значение от 0 до 1 для размера.
Также обратите внимание, что на исходном рисунке взаимосвязь между значением p и размером круга является нелинейной. Поэтому вы можете захотеть использовать какое-то преобразование, близкое к этим отношениям.
В любом случае я бы посоветовал не использовать такие цифры. p-значения сами по себе проблематичны c, но построение их с некоторым преобразованием не имеет для меня особого смысла. Размер корреляции, вероятно, самая важная информация, и график не отражает это. Это может привести к путанице.
PS: я не удосужился добавить легенду, но это не должно быть слишком сложно сделать с legend
.
Небольшое обновление : Преобразование значений p может выглядеть примерно так:
transform_p <- function(x) {
y <- 0.91 - (0.82) * (1 - exp(-3.82 * x))
y
}
Что немного изменит размер кругов:
corrplot(M, size_vector = as.numeric(transform_p((p_vals_mat))))
Опять же, я не рекомендую его, но он должен быть немного ближе к исходному значению.
Если вы просто хотите получить верхний три angular, пропустите только p-значения верхнего трима angular:
upper_tri <- p_vals_mat[upper.tri(p_vals_mat, diag = T)]
corrplot(M, size_vector = transform_p(upper_tri), type = "upper")