首先载入包及数据集
library(patchwork)
library(ggpubr)
data(mtcars)
df <- mtcars
str(df)

下一步分析我们需要几个分类变量,下一步我们应用apply函数批量转换下
(需要重复做3次以上的操作就要想到apply函数或者循环)
varstofactor <- c("cyl","vs","am","gear","carb")#定义需要转换的列变量名称
df[varstofactor] <- lapply(df[varstofactor],factor)#批量转换
str(df)#再次查看数据集结构

下面我们应用ggpubr绘制3个图,用ggplot2绘制一个图,然后组合
首先我们绘制箱式图
p1 <- ggboxplot(df,
x="vs",
y="hp",
color = "vs",
add ="jitter",#抖动点
add.params = list(shape = "vs"),#这里设置下不同分组点得形状
title="箱式图")
p1

接着绘制小提琴图
p2 <- ggviolin(df,
x="am",
y="drat",
fill = "am",
palette="jco",
add = "median_q1q3",
title="小提琴图")
my_comparisons <- list( c("0", "1") )#确定组间比较线位置
p2<- p2+stat_compare_means(comparisons = my_comparisons,
label.y = c(6))+#确定组间比较线纵坐标
stat_compare_means(label.y = 7)#p值位置
p2

以下画一个密度图,并且对其进行分面操作
p3 <- ggdensity(df,
x="disp",
color = "vs",
fill = "vs",
palette="jco",
add ="mean",
facet.by = "vs",#分面
rug = T,#地毯线
title = "密度图")
p3

下面我们用ggplot2绘制一个直方图
p4 <- ggplot(mtcars, #数据集
aes(x=gear)) + #设定全局映射
geom_bar() + #设定几何对象,本图为直方图
ggtitle('直方图') + #设定题目
facet_wrap(~cyl)#设定分面
p4

下面进入拼图环节,要不要太简单
p1+p2+p3+p4

调整图形为3列,按行排序。
p1 + p2 + p3 + p4 + plot_layout(ncol = 3, byrow = TRUE)

除了用+号运算来排版图形外,还可以使用/号来排版
p1/p2

Linux中的管道符 | 可以用来确定分面情况(管道符在按键enter上面)
p1/p3|p2

p1 | p2 | (p3 / p4)

下一步我们在图中加入标签
p1 + p2 + p3/p4 + plot_annotation(tag_levels = 'I')

网友评论