论文是
Radial growth of Qinghai spruce (Picea crassifolia Kom.) and its leading influencing climate factor varied along a moisture gradient
期刊 Forest Ecology and Management
农林科学二区top 影响因子3.55
image.png
论文里的figure4,展示相关性分析的结果,圆形点的大小用来展示相关系数的大小,颜色用来表示相关系数的正负,再单独添加一个正方形的色块用来表示相关性检验的p值。今天的推文我们来试着模仿一下这个图
首先是相关性分析
这里用到的数据集是来自于B站up主 嘿-老晴-
的视频两个矩阵之间的相关性热图这么容易画的吗?零基础学习R语言之相关性分析2
中的数据集,这个Up主更新了很多R语言相关的视频,大家可以关注一下
image.png
数据集的下载链接是 https://github.com/linhesun/bilibiliRlearning/tree/master/20210715
首先是读取数据集
代码语言:javascript复制library(readr)
df1<-read_tsv("20210715/index.txt")
head(df1)
df2<-read_tsv("20210715/meta.txt")
head(df2)
相关性分析
代码语言:javascript复制library(psych)
cor.result<-corr.test(df1,df2,method = "pearson")
首先是提取其中的p值作图
首先把宽格式转换成长格式,并且把pvalue根据大小分成4中情况
代码语言:javascript复制library(tidyverse)
cor.result$p %>%
as.data.frame() %>%
rownames_to_column() %>%
pivot_longer(!rowname) %>%
mutate(p_value=case_when(
value > 0.05 ~ "A",
value >0.01 & value <= 0.05 ~ "B",
value > 0.001 & value <= 0.01 ~ "D",
value <= 0.001 ~ "E"
)) -> new_df1
作图代码
代码语言:javascript复制ggplot()
geom_tile(data=new_df1,
aes(x=rowname,y=name,fill=p_value))
scale_fill_manual(values = c("white","#c0c0c0",
"#808080","#3f3f3f"))
theme(legend.key = element_rect(colour="black"),
axis.text.x = element_text(angle = 90,hjust=1,vjust=0.5))
coord_equal()
image.png
在这个基础上继续叠加相关系数
代码语言:javascript复制cor.result$r %>%
as.data.frame() %>%
rownames_to_column() %>%
pivot_longer(!rowname) %>%
mutate(abs_cor=abs(value)) -> new_df2
library(paletteer)
ggplot()
geom_tile(data=new_df1,
aes(x=rowname,y=name,fill=p_value))
scale_fill_manual(values = c("white","#c0c0c0",
"#808080","#3f3f3f"))
theme(legend.key = element_rect(colour="black"),
axis.text.x = element_text(angle = 90,hjust=1,vjust=0.5))
coord_equal()
geom_point(data=new_df2,
aes(x=rowname,y=name,
size=abs_cor,
color=value))
scale_color_paletteer_c(palette = "ggthemes::Classic Red-Blue")
image.png
最后是在这个基础上添加背后的网格线
代码语言:javascript复制ggplot()
geom_tile(data=new_df1,
aes(x=rowname,y=name,fill=p_value,alpha=p_value))
scale_fill_manual(values = c("white","#c0c0c0",
"#808080","#3f3f3f"),
label=c(">0.05",
"0.01~0.05",
"0.001~0.01",
"<0.01"))
scale_alpha_manual(values = c(0,1,1,1))
guides(alpha=F)
theme_bw()
theme(legend.key = element_rect(colour="black"),
axis.text.x = element_text(angle = 90,
hjust=1,
vjust=0.5),)
coord_equal()
geom_point(data=new_df2,
aes(x=rowname,y=name,
size=abs_cor,
color=value))
scale_color_paletteer_c(palette = "ggthemes::Classic Red-Blue")
image.png