R:使用corrplot通过圆圈的大小和颜色将两个变量(例如相关性和p值)可视化
我正在尝试使用corrplot重新创建某人的图像。这是我试图重新创建的原始图像: 我使用以下R代码:R:使用corrplot通过圆圈的大小和颜色将两个变量(例如相关性和p值)可视化,r,r-corrplot,R,R Corrplot,我正在尝试使用corrplot重新创建某人的图像。这是我试图重新创建的原始图像: 我使用以下R代码: corrplot(as.matrix(rgs), method="circle", type="upper", col=brewer.pal(n=8, name="PuOr"), tl.col="black", tl.srt=45, p.mat = as.matrix(pva
corrplot(as.matrix(rgs),
method="circle",
type="upper",
col=brewer.pal(n=8, name="PuOr"),
tl.col="black",
tl.srt=45,
p.mat = as.matrix(pvalues),
sig.level = 0.05,
insig = "blank")
这就给了我:
我的问题是,在我的绘图中,圆圈的颜色和大小是基于相关性的,但在上面的原始图像中,圆圈的颜色是基于相关性的,而圆圈的大小是基于p值的。我将p值放在一个称为pvalues的不同数据框中(我实际上在上面的代码中使用它来确定哪些圆应该显示,哪些不应该显示在底部的3行中)。我的问题是:如何使颜色和大小像原始图像中那样依赖于两个不同的变量?使用corrplot也可以吗?也许此人使用了正在开发的软件包>;
ggcor
。如果您这样做:
install.packages("devtools")
devtools::install_github("houyunhuang/ggcor")
library(ggplot2)
library(ggcor)
quickcor(fortify_cor(mtcars,cor.test = T), type = "upper") +
geom_circle2(aes(fill = r,r0 = p.value))
您可以使大小随p值而变化
fortify_cor(mtcars,cor.test = T)
创建具有p值的相关性表
# A tibble: 121 x 8
.row.names .col.names r p.value upper.ci lower.ci .row.id .col.id
* <chr> <chr> <dbl> <dbl> <dbl> <dbl> <int> <int>
1 mpg mpg 1 0. 1 1 11 1
2 cyl mpg -0.852 6.11e-10 -0.716 -0.926 10 1
3 disp mpg -0.848 9.38e-10 -0.708 -0.923 9 1
4 hp mpg -0.776 1.79e- 7 -0.586 -0.885 8 1
5 drat mpg 0.681 1.78e- 5 0.832 0.436 7 1
6 wt mpg -0.868 1.29e-10 -0.744 -0.934 6 1
7 qsec mpg 0.419 1.71e- 2 0.670 0.0820 5 1
8 vs mpg 0.664 3.42e- 5 0.822 0.410 4 1
9 am mpg 0.600 2.85e- 4 0.784 0.318 3 1
10 gear mpg 0.480 5.40e- 3 0.710 0.158 2 1
#一个tible:121 x 8
.row.NAME.col.NAME r p.value upper.ci lower.ci.row.id.col.id
*
每加仑1英里10英里。1 1 11 1
2缸mpg-0.852 6.11e-10-0.716-0.926 10 1
3显示mpg-0.848 9.38e-10-0.708-0.923 9 1
4马力mpg-0.776 1.79e-7-0.586-0.885 8 1
5微升0.6811.78e-50.8320.436 7 1
6重量mpg-0.8681.29e-10-0.744-0.9346 1
7 qsec mpg 0.419 1.71e-20.670 0.0820 5 1
8对mpg 0.664 3.42e-50.822 0.410 4 1
上午9时mpg 0.600 2.85e-40.784 0.318 3 1
10档mpg 0.480 5.40e-3 0.710 0.158 2 1
除非你稍微修改一下,否则用corrplot
,你想要的似乎是不可能的。我只是添加了一个新参数size\u vector
,用于绘制圆。有关更改的行,请参见
# 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))
这将稍微改变圆的大小:
corrplot(M, size_vector = as.numeric(transform_p((p_vals_mat))))
同样,我不推荐它,但它应该更接近原始的数字
如果只需要上三角,请仅传递上三角的p值:
upper_tri <- p_vals_mat[upper.tri(p_vals_mat, diag = T)]
corrplot(M, size_vector = transform_p(upper_tri), type = "upper")
upper\u tri如果你能让你的例子重现,那会很有帮助。什么是rgs,p值是从哪里来的。@JBGruber图表看起来像是从哪里来的,这里还有一些可下载的数据集。如果OP给我们一些样本数据会容易得多。请给出数据,看我得出了相同的结论。但是,最好使用临时覆盖函数中的行的包装函数,而不是重新安装包。查看unlockBinding
以允许访问该功能,并使用body(corrplot)
进行更改。在退出包装器之前,您可以将其重新更改。这太棒了,非常感谢!我同意你的建议,我还将生成一个图,该图不会像那样可视化p值,但我也需要这个图,以便进行比较。我在您的解决方案中只剩下一个问题,即,如果我使用type=“upper”选项,我会收到以下错误消息:“符号错误(Pos,add=TRUE,inches=FALSE,circles=asp\u rescale\u factor*:x/y/参数长度不匹配”.知道这是为什么吗?@Allan:谢谢!我想知道这是否可行,但最终我更容易将一个新版本上传到github。实际上,该包应该像以前一样工作。我添加了一个条件来检查新参数是否为null。如果是,函数将使用圆半径的相关性(与往常一样)。否则,它将使用手动定义的大小。抱歉,我没有时间尝试你的建议,但听起来很好!@Abdel:这是意料之中的,因为upper
选项需要更少的向量大小元素。只需传递p值矩阵的上三角:corrplot(M,size\u vector=p\u vals\u mat[upper.tri](p\u vals\u mat,diag=T)],type=“upper”)
您好,我正在尝试使用此解决方案,但一直遇到安装错误错误错误:未能从GitHub安装“corrplot”:(从警告转换而来)安装程序包“/var/folders/1m/1pbv4y0158b1108zl0vwcnxm0000gn/T//RtmpmkKVPd/file148b67086f13a/corrplot_0.85.tar.gz”的退出状态为非零。我在尝试安装此程序包时出错,显示HTTP错误,未找到。您能帮忙吗?文件是否已从该存储库中移动?我不知道。请尝试联系程序包维护者:
upper_tri <- p_vals_mat[upper.tri(p_vals_mat, diag = T)]
corrplot(M, size_vector = transform_p(upper_tri), type = "upper")