ggplot2优雅绘制配对关系散点图

2023-11-06 17:19:10 浏览数 (2)

代码语言:javascript复制
library(tidyverse) 
library(GGally) 
library(patchwork) 
library(ggpubr)    # 载入 ggpubr 包,提供了添加统计注释的功能

ggpairs绘制配对关系散点图

代码语言:javascript复制
ggpairs(iris, columns=1:4, aes(color=Species), upper = "blank")   
  theme_minimal() # 使用最小主题
代码语言:javascript复制
iris %>% as_tibble() %>%  # 将 iris 数据集转换为 tibble
  ggplot(aes(Sepal.Length, Sepal.Width, color=Species), shape=21)   # 设置散点图的美学映射
  geom_point(aes(fill=Species))   # 添加散点图层,填充颜色表示种类
  scale_color_manual(values=c("#788FCE", "#A88AD2", "#E6956F"))   # 手动设置颜色
  ggpubr::stat_cor(aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~"), group=1), color="black",
           label.x.npc = "left")   # 添加统计相关性标签
  theme_classic()   # 使用经典主题
  theme(legend.position = "none") # 隐藏图例

定义函数

❝定义函数的目的在于批量出图可以简化代码 ❞

代码语言:javascript复制
# 用于创建带有相关性标签的散点图
plot_scatter <- function(data, x, y, colors) {
  ggplot(data, aes_string(x = x, y = y, color = "Species", fill = "Species"))   # 设置散点图的美学映射
    geom_point(shape = 21)   # 添加散点图层
    scale_color_manual(values = colors)   # 手动设置颜色
    scale_fill_manual(values = colors)   # 手动设置填充颜色
    stat_cor(aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~"), group = 1),
             color = "black", label.x.npc = "left", label.y.npc = "top", size=3)   # 添加统计相关性标签
    theme_classic()   # 使用经典主题
    theme(legend.position = "none", # 隐藏图例
          axis.ticks = element_blank(), # 隐藏坐标轴刻度
          axis.text = element_blank())   # 隐藏坐标轴文本
    labs(x = NULL, y = NULL) # 移除坐标轴标签
}

# 选择 iris 数据集中的数值列
numeric_cols <- iris %>% select_if(is.numeric) %>% names()
colors <- c("#788FCE", "#A88AD2", "#E6956F") # 设置颜色

# 获取所有唯一的列对组合
combinations <- combn(numeric_cols, 2, simplify = FALSE)
# 为每对组合创建散点图
plots <- map(combinations, ~plot_scatter(as_tibble(iris), .x[1], .x[2], colors))

拼图

代码语言:javascript复制
((plots[[1]] labs(y="Sepal.Width") theme(axis.text.y=element_text(color="black",size=8))) 
    plot_spacer() plot_spacer())/
((plots[[2]] labs(y="Petal.Length") theme(axis.text.y=element_text(color="black",size=8))) 
   plots[[4]] plot_spacer())/
((plots[[3]] labs(x="Sepal.Length",y="Petal.Width") 
    theme(axis.text=element_text(color="black",size=8))) 
  (plots[[5]] labs(x="Sepal.Width") 
     theme(axis.text.x=element_text(color="black",size=8))) 
  plots[[6]] labs(x="Petal.Length") 
   theme(axis.text.x=element_text(color="black",size=8)))

0 人点赞