跟着Forest Ecol Mang学作图:R语言ggplot2作图展示相关性分析结果

2022-01-05 08:57:48 浏览数 (1)

论文是

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

0 人点赞