R进阶绘图--散点图+统计分布图/ggpubr包/aplot包/gridExtra包

今天的内容是连续型变量的组间差异比较,首先来说独立样本。

「两组独立样本:」如果数据同时满足正态性和方差齐性,可以采用独立样本t检验或者Wilcoxon秩和检验,如果不满足可采用Wilcoxon秩和检验。

「两组以上独立样本:」如果数据同时满足正态性和方差齐性,可以采用方差分析(ANOVA)或者Kruskal检验,如果不满足可采用Kruskal检验。

独立样本t检验检验和方差分析(ANOVA)都是参数检验,对数据分布具有一定的假设,在符合检验假设的情况下,建议采用参数检验。

Wilcoxon秩和检验和Kruskal检验都是非参数检验,可用于呈偏态分布或者组间不满足方差齐性的数据,对数据分布无要求。

接下来说非独立样本。

「两组非独立样本:」如果数据满足正态性,可以采用配对t检验或者Wilcoxon符号秩检验,如果不满足可采用Wilcoxon符号秩检验。

「两组以上非独立样本:」如果数据同时满足正态性和方差齐性,可以采用重复测量方差分析(Repeated Measures ANOVA)或者Friedman M检验,如果不满足可采用Friedman M检验。

配对t检验和重复测量方差分析(Repeated Measures ANOVA)都是参数检验,Wilcoxon符号秩检验和Friedman M检验都是非参数检验。

大家在绘图前要首先为自己的数据选择合适的检验方法,不要只求出图哦。

写上面一段话,我都快把自己给绕晕了,个人能力有限,如果大家发现任何问题,欢迎后台留言指正,我会在公众号底部做一个纠错专栏,所有出现错误然后纠正后的内容会放在那里(ps:因为基本上改不了原文)。

绘图

加载包和数据

# 加载包、导入数据
library(ggpubr) # 继承ggplot语法
library(patchwork) # 拼图包
library(ggsci) #配色包
data("ToothGrowth")
ToothGrowth$dose=factor(ToothGrowth$dose)

数据介绍

示例数据

ToothGrowth数据集结构如图所示,这是一项评估维生素C对豚鼠牙齿生长的影响的研究数据,len是牙齿长度;supp是两种给药方式,一种是橙汁OJ,另一种是抗坏血酸VC;dose是三种给药水平。对于该数据集我们后续均采用非参数检验方法。

散点箱线图

# 绘制散点箱线图-----------------------------------------
p <- ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +
  # 绘制箱线图
  geom_boxplot(aes(fill=dose),
               alpha=0.1)+ # 设置透明度
  # 绘制散点
  geom_jitter()+
  # 设置颜色
  scale_color_manual(values = pal_npg('nrc')(9))+
  scale_fill_manual(values = pal_npg('nrc')(9))+
  # 设置主题
  theme_bw()+
  # 去除网格线
  theme(panel.grid = element_blank())
p

plot0

stat_compare_means( )参数解读

  1. 「method(方法)」:指定要执行的统计检验。对于非配对检验:

    • "t.test":数据需满足双独立样本,正态性,方差齐性。

    • "wilcox.test":数据需满足双独立样本。(两组数据的默认方法)

    • "kruskal.test":数据需满足三组或更多组独立样本。(>=3组数据的默认方法)

    • "anova":数据需满足三组或更多组独立样本,正态性,方差齐性。

  2. 「label(标签)」:默认显示检验方法和p值,p.format只显示p值不显示检验方法,p.signif显示显著性水平符号,ns: p > 0.05、*: p <= 0.05、**: p <= 0.01、***: p <= 0.001、****: p <= 0.0001。

  3. 「label.x与label.y」:标签的坐标位置。

  4. 「comparisons(比较)」:一个列表,用于指定要进行比较的组。

  5. 「order(顺序)」:一个可选的参数,用于指定应显示比较的顺序。

  6. 「paired(配对)」:逻辑值。如果为 TRUE,表示进行比较的组是配对的。

  7. 「show.legend」 :逻辑值,是否在图例中显示,建议False。

单因素两水平/多水平比较

# 单因素:两水平/多水平比较----------------------------------------

p1 <- p+stat_compare_means(method = "kruskal.test",
                     label = "p.format",
                     label.x = 0.8, 
                     label.y = 33,
                     show.legend = F)
  
p2 <- p+stat_compare_means(method = "kruskal.test",
                           label = "p.signif",
                           label.x = 0.8, 
                           label.y = 33,
                           show.legend = F)
p1+p2
ggsave('plot1.pdf',width = 7,height = 4.5)

plot1

单因素多水平两两比较

# 单因素:多水平两两比较-------------------------------------------
# 设置要比较的分组
my_comparisons <- list(c("0.5", "1"), c("0.5", "2"),c("1", "2"))
p3 <- p + stat_compare_means(comparisons=my_comparisons,
                       label.y = c(28, 32, 36),
                       method="wilcox.test"
)
p4 <- p + stat_compare_means(comparisons=my_comparisons,
                       label.y = c(28, 32, 36),
                       method="wilcox.test",
                       label="p.signif"
)
p3+p4
ggsave('plot2.pdf',width = 7,height = 4.5)

plot2

双因素


# 双因素----------------------------------------------------------
p5<-ggplot(ToothGrowth,aes(x=dose,y=len,color=supp))+
  geom_boxplot(aes(fill=supp),
               alpha=0.1)+
  geom_jitter(position = position_jitterdodge(jitter.height=0.75, # 散点抖动高度
                                              jitter.width = 0.5, # 散点抖动宽度
                                              dodge.width = 0.75))+ # x轴方向上的闪避量
  scale_color_manual(values = pal_npg('nrc')(9)[c(1,3)])+
  scale_fill_manual(values = pal_npg('nrc')(9)[c(1,3)])+
  theme_bw()+
  theme(panel.grid = element_blank())

p5 <- p5 + stat_compare_means(aes(group = supp),
                        label="p.signif",
                       show.legend = F)
p5
ggsave('plot3.pdf',width = 6,height = 4)

plot3

ggExtra包用于增强ggplot2的功能,它的主要作用是可以向ggplot2散点图的边缘添加各种统计分布图,如密度分布图、直方图、箱线图、小提琴图等。aplot包和gridExtra包是两个拼图包。

需要注意的是ggExtra包的语法不遵循标准的ggplot2的语法,其中主要的绘图函数ggMarginal()需以ggplot2绘图对象作为一个输入参数,而不是直接用“+”连接。另外输入的ggplot2绘图对象中必须要有散点图层ggMarginal()才能正常运行。

绘图

加载包和数据

# 安装包
# install.packages("ggExtra")
# install.packages("aplot")
# install.packages('gridExtra')
# 加载包和数据
library(ggExtra)
library(ggplot2)
library(tidyverse)
library(RColorBrewer) #颜色包
library(aplot) #拼图包
library(gridExtra) #拼图包

iris <- iris

数据介绍

iris数据集是R语言自带的鸢尾花数据集,有5个变量,我们今天用到的3个变量Petal.Length、Petal.Width、Species分别是花瓣长度、花瓣宽度和品种。

示例数据

ggplot2绘散点图+ggExtra绘边缘图

 
# 主体图--散点图
p0 <- ggplot(iris,
             aes(Petal.Length, Petal.Width, colour = Species)) +
  geom_point()+
  theme_bw()+
  scale_color_manual(values = brewer.pal(3,'Set2'))+ # 设置颜色
  theme(legend.position = c(0.12,0.88), # 修改图例位置
        legend.background = element_blank(), # 去除图例背景
        legend.title = element_blank()) # 去除图例标题

「ggMarginal()函数参数讲解:」

  1. type:指定边缘图类型,density是密度分布图,histogram是直方图,densigram是密度分布图+直方图,boxplot是箱线图,violin是小提琴图。

  2. margins:指定要绘制边缘图的位置,参数有bothxy

  3. size:主图相对于边缘图的大小,默认size为5,即主图的高度和宽度都是边缘图的5倍。

  4. groupColour:如果为TRUE则边缘图的color与散点一致,否则为空。

  5. groupFill:如果为TRUE则边缘图的fill与散点一致,否则为黑色。

  6. xparams:仅用于控制x轴的参数列表。

  7. yparams:仅用于控制y轴的参数列表。

# 密度分布图
ggMarginal(p0,type = "density",groupColour = TRUE,groupFill = TRUE)

plot1.1

# 直方图+密度分布图
ggMarginal(p0,type = "densigram",groupColour = TRUE, groupFill = TRUE)

plot1.2

# 箱线图
ggMarginal(p0,type = "boxplot",groupColour = TRUE, groupFill = TRUE)

plot1.3

ggplot2绘图+aplot拼图

 
# ggplot2绘图+aplot拼图-----------------------------------------------

# 上侧密度分布图
top <- ggplot()+
  geom_density(data=iris,
               aes(Petal.Length,fill=Species,color=Species),
               alpha=0.5)+
  scale_fill_manual(values = brewer.pal(3,'Set2'))+ #设置填充颜色
  scale_color_manual(values = brewer.pal(3,'Set2'))+ # 设置线的颜色
  theme_void()+ # 设置主题
  theme(legend.position="none") # 去除图例

# 右侧密度分布图
right <- ggplot()+
  geom_density(data=iris,
               aes(Petal.Width,fill=Species,color=Species),
               alpha=0.5)+
  scale_fill_manual(values = brewer.pal(3,'Set2'))+ #设置填充颜色
  scale_color_manual(values = brewer.pal(3,'Set2'))+ # 设置线的颜色
  theme_void()+ # 设置主题
  coord_flip()+ # 翻转坐标轴
  theme(legend.position="none")# 去除图例

# aplot包拼图
p0 %>% insert_right(right, width=.2) %>% insert_top(top, height=0.2)  
ggsave('plot2.pdf',width = 6,height = 5)

plot2

ggplot2绘图+gridExtra拼图

 
# ggplot2绘图+gridExtra拼图--------------------------------------------
# 创建一个空的ggplot对象
empty <- ggplot() +
  theme(panel.background=element_blank())

# gridExtra包拼图
pdf('plot3.pdf',width = 6,height = 5)
grid.arrange(top, empty, p0, right, ncol=2, nrow=2, widths=c(4,1), heights=c(1,4))
dev.off()

plot3

总结:aplot包的默认拼图间隙很小,比较美观,但是图例被它移到外面了。gridExtra包默认拼图之间的间隙比较大。另外仔细比较aplot包和gridExtra包的拼图结果,可以发现aplot包是把子图的panel区域对齐,而gridExtra包是把子图的plot区域对齐。对于今天的内容,aplot包的对齐效果显然是我们需要的。

panel区域和plot区域不了解的小伙伴不要着急哦,以后的推文会专门出一期的。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皮肤小白生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值