科研绘图二:箱线图(抖动散点)

本文介绍了如何在R语言中使用ggplot2绘制箱线图,同时结合抖动散点图来清晰呈现多组数据的分布情况,特别关注了箱线图的异常值处理和数据可视化技巧。
摘要由CSDN通过智能技术生成

R语言绘图系列—箱线图+抖动散点

(二): 科研绘图一:箱线图(抖动散点)


结果展示

在这里插入图片描述

前言

当每个组的数据点相对较少时,又需要显示出各组数据的分布情况时,可以采用箱线图叠加散点图的方式来表达数据。


一、箱线图

箱形图又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。在各种领域也经常被使用,常见于品质管理,快速识别异常值。箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。可以使用ggplot()绘制本示例的箱线图。

注意:
  • 图层叠加的先后顺序会影响绘制的结果,本示例中从底层开始的图层顺序依次为:箱线图,散点图,箭头,箱线图处于最底层。
  • 散点图需要使用抖动的方式绘制,以避免重叠,示例中横轴为分组变量,纵轴为实际关心的值,设置抖动时需避免纵轴的值被改变,所以geom_jitter函数中仅需设置width,不设置height。
  • 如果数据中存在异常点时,箱线图也会绘制出异常点,而散点图又会绘制所有的点,使得每个异常点被绘制了两次,可以通过在绘制箱线图时将异常点的颜色设定为与背景色相同即可(使其在箱线图中不可见)。

二、R语言绘制

1.R包载入和构建模拟数据

# 载入R包:
library(ggplot2)
library(latex2exp)

# 构建模拟数据:
G1 <- runif(100, min = 0, max = 7)
G2 <- runif(20, min = 5, max = 7)
G3 <- runif(10, min = 1, max = 6)
G4 <- runif(15, min = 2, max = 6)
G5 <- runif(20, min = 2.2, max = 6.5)
G6 <- runif(10, min = 3.5, max = 5)
G7 <- runif(80, min = 1, max = 6)
G8 <- runif(70, min = 1, max = 5.5)
G9 <- runif(60, min = 1.5, max = 6)
G10 <- runif(200, min = 1, max = 7.2)

# 合并:
data <- data.frame(Group = rep(paste0("G", 1:10), 
                                c(100, 20, 10, 15,
                                  20, 10, 80, 70,
                                  60, 200)),
                   values = c(G1,G2,G3,G4,G5,G6,G7,G8,G9,G10))

data$Group <- factor(data$Group, levels = paste0("G", 1:10))
#   Group     values
# 1    G1 2.20054387
# 2    G1 1.90207512
# 3    G1 2.74224843
# 4    G1 2.17059052
# 5    G1 4.14728737
# 6    G1 0.01258516
head(data)
模拟数据示例:
Groupvalues
1G12.20054387
2G11.90207512
3G12.74224843
4G12.17059052
5G14.14728737
6G10.01258516

2.使用ggplot函数绘制箱线图

ggplot(data, aes(Group, values))+
  # 箱线图:
  geom_boxplot(outlier.shape = NA, width = 0.6)+
  # 抖动散点:
  geom_jitter(aes(color = Group), width = 0.15, size = 1)+
  # 横线:
  geom_hline(yintercept = 4, linetype = "dashed")+
  # 箭头:
  geom_segment(aes(x = 2, y = 7.5, xend = 2, yend = 7.2),
               arrow = arrow(length = unit(1, "mm"))) +
  scale_color_manual(name = "Subtype",
                     values = c("#fd6ab0", "#aa5700", "#f48326", "#ffd711",
                                "#9bd53f", "#00ae4c", "#00c1e3", "#007ddb",
                                "#8538d1", "#d01910"))
  # 文字注释:
  annotate("text", label = TeX("$\\textit{P} = 1.6e-06$"), 
           size = 3, x = 2, y = 8)
  # 坐标轴标签:
  xlab("")
  ylab(TeX("$Log_{2}(FPKM+1)$"))
  # 标题:
  ggtitle(TeX("$\\textit{GATA3}$ gene expression in T-ALL"))
  # 主题:
  theme_classic()+
  theme(plot.title = element_text(hjust = 0.5))
  guides(color=guide_legend(override.aes = list(size=2),
                            title.theme = element_text(face = "bold")))

3.保存

ggsave("box_plot.pdf", height = 5, width = 7)

三、完整代码

# 载入R包:
library(ggplot2)
library(latex2exp)

# 构建模拟数据:
G1 <- runif(100, min = 0, max = 7)
G2 <- runif(20, min = 5, max = 7)
G3 <- runif(10, min = 1, max = 6)
G4 <- runif(15, min = 2, max = 6)
G5 <- runif(20, min = 2.2, max = 6.5)
G6 <- runif(10, min = 3.5, max = 5)
G7 <- runif(80, min = 1, max = 6)
G8 <- runif(70, min = 1, max = 5.5)
G9 <- runif(60, min = 1.5, max = 6)
G10 <- runif(200, min = 1, max = 7.2)

# 合并:
data <- data.frame(Group = rep(paste0("G", 1:10), 
                                c(100, 20, 10, 15,
                                  20, 10, 80, 70,
                                  60, 200)),
                   values = c(G1,G2,G3,G4,G5,G6,G7,G8,G9,G10))

data$Group <- factor(data$Group, levels = paste0("G", 1:10))

head(data)
ggplot(data, aes(Group, values))+
  # 箱线图:
  geom_boxplot(outlier.shape = NA, width = 0.6)+
  # 抖动散点:
  geom_jitter(aes(color = Group), width = 0.15, size = 1)+
  # 横线:
  geom_hline(yintercept = 4, linetype = "dashed")+
  # 箭头:
  geom_segment(aes(x = 2, y = 7.5, xend = 2, yend = 7.2),
               arrow = arrow(length = unit(1, "mm"))) +
  scale_color_manual(name = "Subtype",
                     values = c("#fd6ab0", "#aa5700", "#f48326", "#ffd711",
                                "#9bd53f", "#00ae4c", "#00c1e3", "#007ddb",
                                "#8538d1", "#d01910"))
  # 文字注释:
  annotate("text", label = TeX("$\\textit{P} = 1.6e-06$"), 
           size = 3, x = 2, y = 8)
  # 坐标轴标签:
  xlab("")
  ylab(TeX("$Log_{2}(FPKM+1)$"))
  # 标题:
  ggtitle(TeX("$\\textit{GATA3}$ gene expression in T-ALL"))
  # 主题:
  theme_classic()+
  theme(plot.title = element_text(hjust = 0.5))
  guides(color=guide_legend(override.aes = list(size=2),
                            title.theme = element_text(face = "bold")))
ggsave("box_plot.pdf", height = 5, width = 7)
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chj65

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值