该内容已被发布者删除 该内容被自由微信恢复
文章于 3月30日 下午 11:30 被检测为删除。
查看原文
被用户删除
其他

R语言绘图 | 使用ggpubr快速绘制符合文献要求的图

小陈的R语言笔记 小陈的R语言笔記 2024-03-30

准备

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

大家有兴趣可以加群,可以在群里讨论,学习,共同进步!




继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存