该内容已被发布者删除 该内容被自由微信恢复。
文章于 3月30日 下午 11:30 被检测为删除。
被用户删除
其他
R语言绘图 | 使用ggpubr快速绘制符合文献要求的图
准备
ggpubr
包是基于ggplot2
的一个扩展。
ggpubr
包旨在简化ggplot2
的使用,特别是对于那些R编程基础不太深的研究人员。ggplot2
是一个功能强大但在初学者中可能被认为有些复杂的数据可视化包。ggpubr
试图通过提供更直观、更少“不透明”的语法来弥补这一点。
#安装R包
install.packages("ggplot2")
install.packages("ggpubr")
#加载R包
library(ggplot2)
library(ggpubr)
绘图
准备数据:
#数据(随机生成的数据,无实际意义)
# 设置种子以确保结果的可重复性
set.seed(1234)
# 创建一个数据框 wdata,包含两列:性别(sex)和体重(weight)
wdata = data.frame(
sex = factor(rep(c("F", "M"), each=200)), # 性别列,每个性别各200个观测
weight = c(rnorm(200, 55), rnorm(200, 58))) # 体重列,分别生成均值为55和58的正态分布随机数
# 显示数据框 wdata 的前4行
head(wdata, 4)
sex weight
1 F 53.79293
2 F 55.27743
3 F 56.08444
4 F 52.65430
密度图
# 使用 ggdensity 函数绘制密度图
ggdensity(wdata, x = "weight", # x轴变量为体重
add = "mean", # 添加均值线
rug = TRUE, # 显示地毯图
color = "sex", # 根据性别着色
fill = "sex", # 根据性别填充颜色
palette = c("#00AFBB", "#E7B800")) # 指定性别为"F"时的颜色为蓝绿色,性别为"M"时的颜色为橙黄色
直方图
# 使用 gghistogram 函数绘制直方图
gghistogram(wdata, x = "weight", # x轴变量为体重
add = "mean", # 添加均值线
rug = TRUE, # 显示地毯图
color = "sex", # 根据性别着色
fill = "sex", # 根据性别填充颜色
palette = c("#00AFBB", "#E7B800")) # 指定性别为"F"时的颜色为蓝绿色,性别为"M"时的颜色为橙黄色
————————————————————————————
准备数据:
# 载入 ToothGrowth 数据集
data("ToothGrowth")
# 将数据集赋值给变量 df
df <- ToothGrowth
# 显示数据集 df 的前4行
head(df, 4)
len supp dose
1 4.2 VC 0.5
2 11.5 VC 0.5
3 7.3 VC 0.5
4 5.8 VC 0.5
箱线图
# 使用 ggboxplot 函数绘制箱线图
p <- ggboxplot(df, x = "dose", y = "len", # x轴为剂量,y轴为长度
color = "dose", # 根据剂量着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 指定颜色调色板
add = "jitter", # 添加抖动点
shape = "dose") # 根据剂量形状变化
p
添加统计比较:
# 定义比较组合列表
my_comparisons <- list(c("0.5", "1"), c("1", "2"), c("0.5", "2"))
# 添加箱线图的均值比较
p + stat_compare_means(comparisons = my_comparisons) + # 添加成对比较的 p 值
stat_compare_means(label.y = 50) # 添加全局 p 值标签,位置在 y = 50 处
ggsave("D:/GZH/ggpubr/4.png",dpi = 600)
小提琴图
# 使用 ggviolin 函数绘制小提琴图
ggviolin(df, x = "dose", y = "len", fill = "dose", # x轴为剂量,y轴为长度,根据剂量填充颜色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 指定颜色调色板
add = "boxplot", add.params = list(fill = "white")) + # 添加箱线图,箱线颜色为白色
# 添加小提琴图的均值比较
stat_compare_means(comparisons = my_comparisons, label = "p.signif") + # 添加成对比较的 p 值,标签显示 p 值
stat_compare_means(label.y = 50) # 添加全局 p 值标签,位置在 y = 50 处
————————————————————————————
准备数据:
# 载入 mtcars 数据集
data("mtcars")
# 将数据集赋值给变量 dfm
dfm <- mtcars
# 将 cyl 变量转换为因子
dfm$cyl <- as.factor(dfm$cyl)
# 添加名字列
dfm$name <- rownames(dfm)
# 检查数据的前几行,仅显示 "name", "wt", "mpg", "cyl" 列
head(dfm[, c("name", "wt", "mpg", "cyl")])
name wt mpg cyl
Mazda RX4 Mazda RX4 2.620 21.0 6
Mazda RX4 Wag Mazda RX4 Wag 2.875 21.0 6
Datsun 710 Datsun 710 2.320 22.8 4
Hornet 4 Drive Hornet 4 Drive 3.215 21.4 6
Hornet Sportabout Hornet Sportabout 3.440 18.7 8
Valiant Valiant 3.460 18.1 6
条形图
# 使用 ggbarplot 函数绘制条形图
ggbarplot(dfm, x = "name", y = "mpg", # x轴为名字,y轴为每辆车的每加仑行驶的英里数
fill = "cyl", # 根据汽缸数填充颜色
color = "white", # 将条形的边框颜色设置为白色
palette = "jco", # 使用 jco journal 调色板,参考 ?ggpar
sort.val = "desc", # 按值降序排序
sort.by.groups = FALSE, # 不在每个组内进行排序
x.text.angle = 90 # 将 x 轴文本垂直旋转90度
)
分组内排序:
# 使用 ggbarplot 函数绘制条形图
ggbarplot(dfm, x = "name", y = "mpg", # x轴为名字,y轴为每辆车的每加仑行驶的英里数
fill = "cyl", # 根据汽缸数填充颜色
color = "white", # 将条形的边框颜色设置为白色
palette = "jco", # 使用 jco journal 调色板,参考 ?ggpar
sort.val = "asc", # 按值升序排序
sort.by.groups = TRUE, # 在每个组内进行排序
x.text.angle = 90 # 将 x 轴文本垂直旋转90度
)
————————————————————————————
计算z分数:
# 计算 mpg 数据的 z 分数
dfm$mpg_z <- (dfm$mpg - mean(dfm$mpg)) / sd(dfm$mpg)
# 创建 mpg_grp 变量,表示 mpg_z 为正值或负值的分组
dfm$mpg_grp <- factor(ifelse(dfm$mpg_z < 0, "low", "high"),
levels = c("low", "high"))
# 检查数据的前几行,仅显示 "name", "wt", "mpg", "mpg_z", "mpg_grp", "cyl" 列
head(dfm[, c("name", "wt", "mpg", "mpg_z", "mpg_grp", "cyl")])
name wt mpg mpg_z mpg_grp cyl
Mazda RX4 Mazda RX4 2.620 21.0 0.1508848 high 6
Mazda RX4 Wag Mazda RX4 Wag 2.875 21.0 0.1508848 high 6
Datsun 710 Datsun 710 2.320 22.8 0.4495434 high 4
Hornet 4 Drive Hornet 4 Drive 3.215 21.4 0.2172534 high 6
Hornet Sportabout Hornet Sportabout 3.440 18.7 -0.2307345 low 8
Valiant Valiant 3.460 18.1 -0.3302874 low 6
偏差图
有序条形图:
# 使用 ggbarplot 函数绘制条形图
ggbarplot(dfm, x = "name", y = "mpg_z", # x轴为名字,y轴为 mpg_z 分数
fill = "mpg_grp", # 根据 mpg_grp 填充颜色
color = "white", # 将条形的边框颜色设置为白色
palette = "jco", # 使用 jco journal 调色板,参考 ?ggpar
sort.val = "asc", # 按值升序排序
sort.by.groups = FALSE, # 不在每个组内进行排序
x.text.angle = 90, # 将 x 轴文本垂直旋转90度
ylab = "MPG z-score", # y轴标签
xlab = FALSE, # 不显示 x轴标签
legend.title = "MPG Group" # 设置图例标题
)
旋转条形图:
# 使用 ggbarplot 函数绘制条形图
ggbarplot(dfm, x = "name", y = "mpg_z", # x轴为名字,y轴为 mpg_z 分数
fill = "mpg_grp", # 根据 mpg_grp 填充颜色
color = "white", # 将条形的边框颜色设置为白色
palette = "jco", # 使用 jco journal 调色板,参考 ?ggpar
sort.val = "desc", # 按值降序排序
sort.by.groups = FALSE, # 不在每个组内进行排序
x.text.angle = 90, # 将 x 轴文本垂直旋转90度
ylab = "MPG z-score", # y轴标签
legend.title = "MPG Group", # 设置图例标题
rotate = TRUE, # 旋转 x 轴文本
ggtheme = theme_pubr() # 使用 theme_pubr 主题
)
棒棒糖图
基本棒棒糖图:
# 使用 ggdotchart 函数绘制点图
ggdotchart(dfm, x = "name", y = "mpg",
color = "cyl", # 根据汽缸数着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色调色板
sorting = "ascending", # 按值升序排序
add = "segments", # 添加从 y = 0 到点的分段线
ggtheme = theme_pubr() # 使用 theme_pubr 主题
)
排序、旋转和分组:
# 使用 ggdotchart 函数绘制点图
ggdotchart(dfm, x = "name", y = "mpg",
color = "cyl", # 根据汽缸数着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色调色板
sorting = "descending", # 按值降序排序
add = "segments", # 添加从 y = 0 到点的分段线
rotate = TRUE, # 垂直旋转 x 轴文本
group = "cyl", # 按照汽缸数分组排序
dot.size = 6, # 设置较大的点的大小
label = round(dfm$mpg), # 将 mpg 值作为点的标签
font.label = list(color = "white", size = 9,
vjust = 0.5), # 调整标签参数
ggtheme = theme_pubr() # 使用 theme_pubr 主题
)
偏差图:
# 使用 ggdotchart 函数绘制点图
ggdotchart(dfm, x = "name", y = "mpg_z",
color = "cyl", # 根据汽缸数着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色调色板
sorting = "descending", # 按值降序排序
add = "segments", # 添加从 y = 0 到点的分段线
add.params = list(color = "lightgray", size = 2), # 修改分段线的颜色和大小
group = "cyl", # 按照汽缸数分组排序
dot.size = 6, # 设置较大的点的大小
label = round(dfm$mpg_z, 1), # 将 mpg_z 值保留一位小数作为点的标签
font.label = list(color = "white", size = 9,
vjust = 0.5), # 调整标签参数
ggtheme = theme_pubr() # 使用 theme_pubr 主题
) +
geom_hline(yintercept = 0, linetype = 2, color = "lightgray") # 添加水平虚线表示零点
克利夫兰点图:
# 使用 ggdotchart 函数绘制点图
ggdotchart(dfm, x = "name", y = "mpg",
color = "cyl", # 根据汽缸数着色
palette = c("#00AFBB", "#E7B800", "#FC4E07"), # 自定义颜色调色板
sorting = "descending", # 按值降序排序
rotate = TRUE, # 垂直旋转 x 轴文本
dot.size = 2, # 设置较大的点的大小
y.text.col = TRUE, # 根据汽缸数着色 y 轴文本
ggtheme = theme_pubr() # 使用 theme_pubr 主题
) +
theme_cleveland() # 添加虚线网格
参考资料:https://rpkgs.datanovia.com/ggpubr/index.html
大家有兴趣可以加群,可以在群里讨论,学习,共同进步!