R语言包ggplot2绘制多组箱线图

本文记录于2021年6月28日,2022年11月14日更新,如果内容有误,请私信或评论,我会在第一时间进行更正。

由于许多人好像对ggplot2所需要的数据的结构不是很清楚,那么我在这里补充一些内容,希望能够帮助大家理解下面的绘图,后续有时间,我也会重新开一个新的帖子,对ggplot2的数据以及各种常用形式的绘图进行更清晰完整的说明。

首先需要强调一下,ggplot2在进行绘图前,基本都需要把数据转化为上图右边的形式,即三个列的形式,对于初始数据并没有太多的要求,矩阵,列表等等。

如果数据是类似上图左边的形式,则只要指定行名然后使用melt函数转换即可,如下:

data <- reshape2::melt(rawdata, id = rowname(rawdata))

同理,如果想要指定特定的列用来绘图,只需要指定列即可:

data <- reshape2::melt(rawdata[, c("a", "b")], 
                       id = rowname(rawdata),
                       variable.name = "VAR",
                       value.name = "VAL")

鉴于有挺多人对该问题有疑惑,我把完整的代码和数据放在这里,希望还有疑惑的同学看一下,如果还是有不明白的地方一起讨论。

Cibersort的数据与代码-算法与数据结构文档类资源-CSDN下载

最近在做cibersort浸润分析,在对结果做可视化的时候遇到一点问题(问题解答蓝字部分)

 根据默认的绘图只能进行一组数据的绘制,而我想要的结果是不同组数据同时展示

就是这张图这种,然后在网上查了一下这个问题,虽然R语言相关的可视化问题挺多,但是没有发现这个问题怎么解决。

不过也有一些帖子给了启发,就是导入一个额外的样本表型信息,然后再在代码的fill属性中设置选择样本信息,这对和我一样的小白们讲是比较麻烦的一种解决方法。

后来结合这个思路,我找到了一个解决办法:

这个是原始数据

 这个是自己手动添加了分组信息之后的数据

最简单的解决方法就是在数据中对样本直接添加分组信息,根据自己做分析时的分组,直接添加在cibersort的结果中。

代码也只需要非常简单的修改

plot.info_all <- plot.info %>%
  as.data.frame() %>%
  rownames_to_column("sample") %>%
  pivot_longer(cols = 3:8,
               names_to = "CellType",
               values_to = "Composition")

plot.info_all <- plot.info_all[,c(19,2,20)] 
ggboxplot(
  plot.info_all,
  x = "CellType",
  y = "Composition",
  color = "black",
  fill = "group",#只需要修改这里,讲fill = "CellType"改为fill = "group"
  xlab = "",
  ylab = "Cell composition",
  main = "TME Cell composition"
) +
  theme_base() +
  theme(axis.text.x = element_text(
    angle = 90,
    hjust = 1,
    vjust = 1
  ))

Q&A

1,针对代码“plot.info_all[,c(19,2,20)]”中的“19,2,20”进行一个解释

上面这张图是免疫浸润的结果,这个结果是每个样本的每种免疫细胞的评分,对于每个样本,这些评分的和是1,我们进行免疫浸润的目的就是得到这个占比,以此来进行针对单样本层面的免疫分析。

绘图则是对结果进行可视化的展示,在刚才那行代码中,就是对需要展示的结果进行选择,同时需要结合前面一部分代码:

plot.info_all <- plot.info %>%
  as.data.frame() %>%
  rownames_to_column("sample") %>%
  pivot_longer(cols = 3:10,
               names_to = "CellType",
               values_to = "Composition")

注意这部分代码里的“cols = 3:10”,意思是选择刚才那个免疫浸润结果里的第3到10列进行读取

从结果中可以看出,进行列选择之前是24列,选择之后是19列,19,2,20”中19指的是CellType,就是盒图结果的X轴名称,2指的是分组依据,也就是前面提到的手动添加的分组信息,20指的是Compostion列,也就是将选择的细胞进行计算之后得到的分值

这里多说一句,plot.info_all的数据是以列的方式进行保存的,在绘图时进行读取并绘图的依据便是前面选择的三个对象

如果绘图时想要根据自己的需求进行选择对象,就可以通过这两处修改进行选择了

2,对两组或任意组直接的差异关系进行对比,并显示

 代码如下:

library("ggsignif")
library(gridExtra)
library(tibble)#rownames_to_column
library(ggplot2)
library(grid)
library(reshape2)
library(ggpubr)
library(dplyr)
library(tidyr)
library(pheatmap)
pkgs <- c("matrixStats", "pheatmap", "RColorBrewer", "tidyverse", "cowplot","ggpubr","bslib","ggthemes")
lapply(pkgs, library, character.only = T)#Error in theme_base() : 没有"theme_base"这个函数

plot.info <- read.table('ImmuCellAI_icb_result.txt',
                        sep = '\t',
                        header = T,
                        row.names = 1)
plot.info <- plot.info[,-2]###去除respond列
#plot.info <- plot.info[,-17]###去除数据太低的Effect-memory,如果对数据有改动请注意修改
plot.info <- plot.info[,-25]###去除gamma
plot.info <- plot.info[,-25]###去除score
###################################################
plot.info_1 <- plot.info %>%
  as.data.frame() %>%
  rownames_to_column("sample") %>%
  pivot_longer(cols = 3,
               names_to = "CellType",
               values_to = "Composition")
###分组进行绘图
plot.info_1 <- plot.info_1[,c(25,2,26)] 
plot1 <- ggboxplot(
  plot.info_1,
  x = "CellType",
  y = "Composition",
  color = "black",
  fill = "group", #只需要修改这里,讲fill = "CellType"改为fill = "group"
  xlab = "",
  ylab = "",
  #main = "TC",
  col="white",
  borde="white"
)
###分组并计算差异进行绘图
geom_signif()
compare_means(Composition ~ group, #将Composition与group进行联系
              data = plot.info_1,
              method="wilcox.test", 
              paired=FALSE)#计算Wilcoxon

my_comparisons <- list(c("group1","group2"), c("group1","group3"),c("group1", "group4"))#这里设置对照组
ggplot(plot.info_1,aes(group,
                       Composition,
                       fill=group#CellType#设置
                       ))+
  geom_boxplot(width=0.5)+
  theme(plot.title=element_text(size = 10),
        axis.text.x=element_text(size=15,angle=0),
        axis.text.y=element_text(size=15),
        axis.title.x=element_text(size = 20),
        axis.title.y=element_text(size = 25))+
  labs(x="Cytotoxic.TC", #设置CellType#横坐标显示内容,可以为空
       y= "" #纵坐标显示内容,可以为空
       )+
  geom_signif(comparisons = my_comparisons,step_increase = 0.1,#两组直接对比框的高度
              map_signif_level = F,#这里可以设置两组之间差异显示为数值或者***,F为数值,T为***
              test = t.test,size=1,#线条粗细
              textsize = 5#P值字号大小
              )

此处代码仅供参考

我把代码与数据文件上传了CSDN资源

boxplot.zip_matlabboxplot美化-其它文档类资源-CSDN下载

有兴趣的可以支持一下

### 回答1: 绘制分组箱线图ggplot2 包中常用的数据可视化方法之一。以下是用 R 语言ggplot2绘制分组箱线图的步骤: 1. 导入需要绘制箱线图的数据集。例如,假设我们有一个名为 `data` 的数据集,其中包含了两个因子变量 `group` 和 `category`,以及一个连续变量 `value`。 2. 使用 `ggplot()` 函数创建一个绘图对象,并使用 `geom_boxplot()` 函数添加箱线图图层。例如,代码如下: ``` library(ggplot2) ggplot(data, aes(x = group, y = value, fill = category)) + geom_boxplot() ``` 其中,`x` 参数指定箱线图中的因子变量,`y` 参数指定箱线图中的连续变量,`fill` 参数指定用于分组的因子变量。 3. 可以使用 `scale_fill_*()` 函数来更改填充颜色,其中 `*` 代表你想要的颜色变量,如 `scale_fill_brewer()`。例如: ``` ggplot(data, aes(x = group, y = value, fill = category)) + geom_boxplot() + scale_fill_brewer(palette = "Set1") ``` 其中 `palette` 参数指定所使用的调色板。 4. 可以添加其他元素来美化绘图,如标题、坐标轴标签等等。例如: ``` ggplot(data, aes(x = group, y = value, fill = category)) + geom_boxplot() + scale_fill_brewer(palette = "Set1") + labs(title = "分组箱线图", x = "组别", y = "数值") ``` 其中,`labs()` 函数用于添加标签和标题。 以上是用 R 语言ggplot2绘制分组箱线图的基本步骤。根据需要,你还可以进一步调整图形的各个方面来满足你的需求。 ### 回答2: 要使用R语言ggplot2绘制分组箱线图,可以按照以下步骤进行操作: 步骤1:先安装和加载ggplot2包。可以使用以下代码安装并加载ggplot2包: install.packages("ggplot2") # 安装ggplot2包 library(ggplot2) # 加载ggplot2包 步骤2:准备数据。要绘制分组箱线图,需要准备包含分组变量和数值变量的数据集。可以使用data.frame()函数创建数据框。例如: data <- data.frame(group = rep(c("A", "B", "C"), each = 100), value = rnorm(300, 0, 1)) 步骤3:使用ggplot()函数创建绘图对象,并使用aes()函数设置x轴和y轴变量。例如: plot <- ggplot(data, aes(x = group, y = value)) 步骤4:使用geom_boxplot()函数添加箱线图的图层。例如: plot + geom_boxplot() 步骤5:可选的步骤,可以使用theme()函数和其他函数设置横轴标签、纵轴标签、标题等。例如: plot + geom_boxplot() + labs(x = "Group", y = "Value", title = "Grouped Boxplot") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) 步骤6:运行代码并查看绘制的分组箱线图。 ### 回答3: 要使用R语言ggplot2绘制分组箱线图,首先需要安装并加载ggplot2包。可以使用以下代码安装和加载ggplot2包: install.packages("ggplot2") library(ggplot2) 接下来,需要准备数据集。数据集应包含分组变量和数值变量。假设我们有一个包含三个组别(A、B、C)和一个数值变量(score)的数据集df。数据集可以通过以下代码创建: df <- data.frame(group = rep(c("A", "B", "C"), each = 100), score = rnorm(300, mean = 50, sd = 10)) 接下来,使用ggplot函数创建一个基础图层,并使用geom_boxplot函数添加箱线图的图层。使用aes函数将组别变量映射到x轴,将数值变量映射到y轴。设置fill参数来区分不同组别的箱线图ggplot(df, aes(x = group, y = score)) + geom_boxplot(fill = "lightblue") 然后,可以通过添加其他美化选项来自定义图形。例如,可以使用theme函数更改图表的主题,可以使用labs函数添加标题和轴标签。 ggplot(df, aes(x = group, y = score)) + geom_boxplot(fill = "lightblue") + theme_minimal() + labs(title = "分组箱线图", x = "组别", y = "分数") 最后,使用print函数打印图形。 print(ggplot(df, aes(x = group, y = score)) + geom_boxplot(fill = "lightblue") + theme_minimal() + labs(title = "分组箱线图", x = "组别", y = "分数"))
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值