【R绘图】线性回归的组合图


做两个指标的相关性,同时还要计算两个指标的大小

想到之前看到过一篇推送中教程的图片,便作为参考并进行改编

结果如下

library(ggplot2)
library(ggpubr)
library(patchwork)
library(ggpmisc)

## 只取一部分数据进行实例
iris2 <- subset(iris,Species %in% c('setosa','versicolor'))

## 画右侧的图形
## 需要设置vjust参数,否则显著性***可能没有足够空间显示
## 如果不设置vjust参数,则可以通过修改xlim和ylim,但可能会使得主图散点分布距离边界太远
(p.r <- ggboxplot(iris2, 
                  x = "Species", 
                  y = "Sepal.Length", 
                  fill = "Species",
                  palette = c("#00AFBB", "#E7B800"),
                  add = "jitter", 
                  add.params = list(fill = "white"))+
   stat_compare_means(comparisons = list(c('setosa','versicolor')), label = "p.signif",size=10,vjust=0.6)+
   One_theme()+
   theme(axis.text.x = element_blank(),
         axis.text.y = element_blank(),
         axis.title = element_blank()))

## 画上部分图形
(p.u <- ggboxplot(iris2, 
                  x = "Species", 
                  y = "Sepal.Width", 
                  fill = "Species",
                  palette = c("#00AFBB", "#E7B800"),
                  add = "jitter", 
                  add.params = list(fill = "white"))+
    stat_compare_means(comparisons = list(c('setosa','versicolor')), label = "p.signif",size=10,vjust=0.6)+
    coord_flip()+
    One_theme()+
    theme(axis.text.x = element_blank(),
          axis.text.y = element_blank(),
          axis.title = element_blank()))

## 画主图
## vstep 设置两组统计信息的间距
(p3 <- ggplot(iris2, aes (x=Sepal.Width, y=Sepal.Length,fill=Species)) +
    geom_point(alpha=1,size=3, shape=21)+
    geom_smooth(method='lm',colour="black",size=1,level=0.95,show.legend = F)+
    scale_fill_manual(values = c("#00AFBB", "#E7B800"),name='')+
    scale_color_manual(values = c("#00AFBB", "#E7B800"),name='')+
    labs(x='Sepal Width',y='Sepal Length')+
    stat_poly_eq(aes(color=Species,label = paste(
      #..eq.label.., ## 方程展示
      ..adj.rr.label.., 
      ..p.value.label..,
      sep = '~~~')), 
      label.x='right', 
      formula = y ~ x, parse = T,size=5,vstep = 0.1)+
    xlim(ggplot_build(p.u)$layout$panel_scales_y[[1]]$range$range) +
    ylim(ggplot_build(p.r)$layout$panel_scales_y[[1]]$range$range) +
    One_theme()+
    theme(axis.text.x = element_text(size=15,color = 'black'),
          axis.text.y = element_text(size=15,color = 'black'),
          axis.title.x = element_text(size = 15,face = 'bold'),
          axis.title.y = element_text(size = 15,face = 'bold')))


# 单独提取并制作图例
leg <- get_legend(p3+theme(legend.position = 'top',legend.background = element_blank(),
                           legend.text = element_text(size=15))+
                    guides(fill = guide_legend(nrow = 2,override.aes = list(size=7))))
# 将图例转换为图片
as_ggplot(leg)

## 组合图形
p.u +as_ggplot(leg)+p3+ p.r  + 
  plot_layout(heights = c(1,4),widths = c(4,1),ncol = 2,nrow = 2)

## 输出图形
pdf(paste0(output,'Length-Width.pdf'),onefile=F,height=6.5,width=6.5)
p.u +as_ggplot(leg)+p3+ p.r  + 
  plot_layout(heights = c(1,4),widths = c(4,1),ncol = 2,nrow = 2)
dev.off()

组合图形主要需要考虑一些细节对齐以及展示的问题

比如ggpubr:::stat_compare_meansvjust参数调节*的位置;ggpmisc:::stat_poly_eqvstep参数调节两组数值的间距

我们设置了右边与上边两个图形的坐标轴标签和标题都为空白,在ggplot2有两种方式,第一种是通过labs(x='',y='')将其赋值为空白,但是这种方法在组合图形的时候,会导致两组图形之间存在较大的间距,因为我们只是将标签和标题设置为了空,但是作图时仍然保留了其在图片上的位置,因此,通过对theme函数的设置,可以保证彻底不对该部分进行作图,便减少了空白间距

酷不酷炫!想不想学!带统计学的PCoA完美解决打样本量多组数据不好区分的问题!!


文章作者: Xuyifei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xuyifei !
评论
  目录