Plotting two graphs getting the error: Cannot convert object of class list into a grob

Plotting two graphs getting the error: Cannot convert object of class list into a grob

我试图将两个箱线图 (box1, box2) 并排放置,并在左上角将它们标记为“A”和“B”。我正在尝试为此使用 cowplot-package。

这是函数:

plot_grid(box1, box2, labels = c('A', 'B'), label_size = 12)

然后我收到警告信息:

In as_grob.default(plot) : Cannot convert object of class list into a grob.*

我得到的唯一打印输出是 A 和 B 字母。 我也尝试过使用:

boxC <- c(box1, bow2)
plot_grid(plotlist = boxC, labels = c('A', 'B'), label_size = 12, nrow=2)

我的代码主要来自这个类似问题的答案,但它似乎对我不起作用。

在那个问题中,有人还建议使用 dev.off(),但这对我也不起作用。

非常感谢回复!

我根据mhh的回复写的解决方案:

BOX1_data <- read.table(file = "clipboard", 
                  sep = "\t", header=TRUE)
BOX1_data$Histology <- as.factor(BOX1_data$Histology)
BOX1plot <- ggplot(BOX1_data, aes(x=Histology, y=No.Variants)) + geom_boxplot()
BOX1plot

BOX2_data <- read.table(file = "clipboard", 
                  sep = "\t", header=TRUE)
BOX2_data$Stage <- as.factor(BOX2_data$Stage)
BOX2plot <- ggplot(BOX2_data, aes(x=Stage, y=No.Variants)) + geom_boxplot()
BOX2plot

BOX_list <- list(BOX1plot, BOX2plot)
> ggarrange(plotlist = BOX_list, labels = c('A', 'B'), ncol = 2)

这是因为它需要一个列表,但你提供的是一个向量! 要克服这个问题,您可以简单地使用 boxC <- list(box1,box2).

这是一个工作示例

为此,您需要 ggplot2ggpubr 使用 install.packages("ggpubr") 安装后者。 然后使用 library(ggpubr)

将它们都放入您的工作区

library(ggplot2)
library(ggpubr)
df1 <- data.frame(group = "Stuff",  var = runif(10))
df2 <- data.frame(group = "Stash",  var = runif(10))

box1 <- ggplot(data = df1, aes(y = var)) +
  geom_boxplot()

box2 <- ggplot(data = df2, aes(y = var)) +
  geom_boxplot()

my_plot_list <- list(box1,box2)

ggarrange(plotlist = my_plot_list, labels = c('A', 'B'), nrow = 2)

reprex package (v0.3.0)

于 2020-08-19 创建

感谢 mhh 的回答,我编写了这段有效的代码! :)

BOX1_data <- read.table(file = "clipboard", 
                  sep = "\t", header=TRUE)
BOX1_data$Histology <- as.factor(BOX1_data$Histology)
BOX1plot <- ggplot(BOX1_data, aes(x=Histology, y=No.Variants)) + geom_boxplot()
BOX1plot

BOX2_data <- read.table(file = "clipboard", 
                  sep = "\t", header=TRUE)
BOX2_data$Stage <- as.factor(BOX2_data$Stage)
BOX2plot <- ggplot(BOX2_data, aes(x=Stage, y=No.Variants)) + geom_boxplot()
BOX2plot

BOX_list <- list(BOX1plot, BOX2plot)
> ggarrange(plotlist = BOX_list, labels = c('A', 'B'), ncol = 2)