R语言绘制组间比较散点图并自动添加P值信息

简介: 查询ggprism包使用时候发现官网给出的一示例图比较常用,这里记录学习一下。

3cf76cdc399ce3b58581bb79f9c852a.png

加载R包准备数据

## 加载R包
sapply(c('dplyr',"ggplot2","ggprism",
         "ggbeeswarm","rstatix"), require, character.only = TRUE)
## 准备数据
data("wings")
head(wings)
## 整理数据
wings$measure <- wings$measure %>% 
  gsub("\\.", " ", .) %>% 
  tools::toTitleCase() %>% 
  factor(., levels = c("Wing Size", "Cell Size", "Cell Number"))
head(wings)
# A tibble: 6 × 4
  sex   genotype  measure     percent.change
  <fct> <fct>     <fct>                <dbl>
1 male  Tps1MIC/+ Wing Size            -2.45
2 male  Tps1MIC/+ Cell Size             6.33
3 male  Tps1MIC/+ Cell Number          -8.41
4 male  Tps1MIC/+ Wing Size            -1.14
5 male  Tps1MIC/+ Cell Size            -2.53
6 male  Tps1MIC/+ Cell Number           1.26
## 基本绘图
p <- ggplot(wings, aes(x = measure, y = percent.change))+
  ggbeeswarm::geom_beeswarm(
    aes(fill = genotype), 
    dodge.width = 0.9, 
    shape = 21,
    cex = 3.5
  )
p
## 分面
p <- p+facet_wrap(
  ~sex,
  scales = 'free',
  labeller = labeller(sex = c(male = "\u2642", female = "\u2640"))
)+
  geom_hline(yintercept = 0, linetype = 2, linewidth = 0.3)
p

c9b96015a03933d32ef0ad4739d015b.png

注意两个细节:

  1. tools::toTitleCase可以替换字符中每个单词的首字母大写,str_to_title函数也可类似这种效果

TotitleCase函数源码如下:
ToTitleCase <- function(x) {
  paste0(toupper(substr(x, 1, 1)), substr(x, 2, nchar(x)))
}
  1. facet_wrap中的labeller属性对不同的因子类型设置不同的标记,例子中\u2642就是使用了unicode字符标记,推荐个Unicode Character Table便于查询

704f4a6a6f1ccb36febc0c75e814968.png

添加均值

p <- p + stat_summary(
  geom = "crossbar",
  aes(fill = genotype),
  fun = mean,
  position = position_dodge(0.9),
  colour = "red",
  linewidth = 0.4, width = 0.7,
  show.legend = FALSE
)
p

c2a6853fe35811b5b8f09e0a892cc8d.png

计算显著性P值

wings_pvals <- wings %>%
  group_by(sex, measure) %>%
  rstatix::t_test(
    percent.change ~ genotype, 
    p.adjust.method = "BH", 
    var.equal = TRUE, 
    ref.group = "Tps1MIC/+"
  ) %>%
  rstatix::add_x_position(x = "measure", dodge = 0.9) %>% # dodge must match points
  mutate(label = c("***", "*", "P = 0.26", "***", "***", "P = 0.65"))
p <- p + add_pvalue(
  wings_pvals, y = 10, xmin = "xmin", xmax = "xmax", tip.length = 0, 
  fontface = "italic", lineend = "round", bracket.size = 0.5
)
p

a5309a91f45544eb9100b85196c5cbc.png

  • 这里主要利用rstatix包中的t_test函数批量计算P值,使用add_x_position自动计算P值的位置,信息 最后通过add_pvalue函数根据位置信息自动标记于图中。

355d0ceaa767114c111a6c03173c8c5.png

设置主题及配色

## 添加主题元素
p <- p + theme_prism(
  base_fontface = "plain", 
  base_line_size = 0.7, 
  base_family = "Arial") + 
  scale_x_discrete(guide = guide_prism_bracket(width = 0.15), 
  labels = scales::wrap_format(5))+
  scale_y_continuous(
          limits = c(-20, 12),
          expand = c(0, 0),
          breaks = seq(-20, 10, 5),
          guide = "prism_offset") + 
  labs(y = "% change")  + 
  theme(
    legend.position = "bottom",
    axis.title.x = element_blank(),
    strip.text = element_text(size = 14),
    legend.spacing.x = unit(0, "pt"),
    legend.text = element_text(margin = margin(r = 20))
   ) +
  guides(fill = guide_legend(override.aes = list(size = 3)))
p
## 改变颜色及图例文本格式
p <- p + scale_fill_manual(
  values = c("#026FEE", "#87FFFF"), 
  labels = c(expression("Tps"*1^italic("MIC")~"/ +"), 
             expression("Tps"*1^italic("MIC")))
)
p
## 添加文本注释
p <- p + geom_text(
  data = data.frame(
    sex = factor("female", levels = c("male", "female")), 
    measure = "Cell Number", 
    percent.change = -18.5, 
    lab = "(n = 10)"
  ), 
  aes(label = lab)
)
p

518a411ef03f4d80cd0e8af18b9dedd.png

虽说是一个简单的示例图, 但其中有很多细节调整值得去学习,而且这种类型的图论文中也是比较常用的。

相关文章
|
6月前
|
数据可视化 安全 数据挖掘
数据分享|R语言用主成分分析(PCA)PCR回归进行预测汽车购买信息可视化
数据分享|R语言用主成分分析(PCA)PCR回归进行预测汽车购买信息可视化
|
数据可视化 数据挖掘 Python
跟着Nature Metabolism学作图:R语言ggplot2散点图
跟着Nature Metabolism学作图:R语言ggplot2散点图
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2散点栅格化能够减小输出pdf的文件大小
跟着Nature学作图:R语言ggplot2散点栅格化能够减小输出pdf的文件大小
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2散点图和柱形图完整示例(Extended Fig3)
跟着Nature学作图:R语言ggplot2散点图和柱形图完整示例(Extended Fig3)
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2频率分布直方图和散点图添加误差线
跟着Nature学作图:R语言ggplot2频率分布直方图和散点图添加误差线
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
20天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
40 3
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为