ggplot2绘图基本图形绘制重点关注

跟着Forest Ecol Mang学作图:R语言ggplot2

2022-01-14  本文已影响0人  小明的数据分析笔记本

论文是

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

首先是读取数据集

library(readr)
df1<-read_tsv("20210715/index.txt")
head(df1)

df2<-read_tsv("20210715/meta.txt")
head(df2)

相关性分析

library(psych)
cor.result<-corr.test(df1,df2,method = "pearson")

首先是提取其中的p值作图

首先把宽格式转换成长格式,并且把pvalue根据大小分成4中情况

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

作图代码

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

在这个基础上继续叠加相关系数

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

最后是在这个基础上添加背后的网格线

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

示例数据和代码的获取方式可以在公众号查看

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

上一篇下一篇

猜你喜欢

热点阅读