绘制两个错误的图形:无法将类列表的对象转换为grob

问题描述

我试图将两个框线图(Box1,Box2)彼此并排放置,并在左上角分别标记为“ A”和“ B”。我正在尝试使用cowplot软件包。

这是功能

plot_grid(Box1,Box2,labels = c('A','B'),label_size = 12)

然后我收到警告消息:

在as_grob.default(plot)中: 无法将类列表的对象转换为grob。*

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

BoxC <- c(Box1,bow2)
plot_grid(plotlist = BoxC,label_size = 12,nrow=2)

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

Lay out multiple ggplot graphs on a page

在这个问题上,有人还建议使用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",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,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",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,ncol = 2)