如何将 summary() 的结果显示为 plot/grob?
How to display results of summary() as plot/grob?
上下文:我有一个包含 50 多个特征的数据集,我想为每个特征生成一个箱线图、直方图和汇总统计数据,以供展示之用。这使得 150 多个地块。我用来执行上述操作的代码是这样的:
library(ggplot2)
library(dplyr)
library(ggpubr)
library(ggthemes)
library(Rmisc)
library(gridExtra)
myplots <- list() # new empty list
for (i in seq(2,5,3)){
local({
i <- i
p1 <- ggplot(data=dataset,aes(x=dataset[ ,i], colour=label))+
geom_histogram(alpha=.01, position="identity",bins = 33, fill = "white") +
xlab(colnames(dataset)[ i]) + scale_y_log10() + theme_few()
p2<- ggplot(data=dataset, aes( x=label, y=dataset[ ,i], colour=label)) +
geom_boxplot()+ylab(colnames(dataset)[ i]) +theme_few()
p3<- summary(dataset[ ,i])
print(i)
print(p1)
print(p2)
print(p3)
myplots[[i]] <<- p1 # histogram
myplots[[i+1]] <<- p2 # boxplot
myplots[[i+2]] <<- p3 # summary
})
}
myplots[[2]]
length(myplots)
n <- length(myplots)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(myplots, ncol=nCol)) # PROBLEM: cant print summary as grob
我创建了一个图表列表,每 3 个元素代表每个特征的直方图、箱线图和摘要的结果。我遍历了 50 多个特性中的每一个,将每个结果附加到我的列表中(我知道这不是最好的方法)。当我尝试通过网格排列打印列表时,我 运行 遇到以下问题:
Error in gList(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, height = 1, :
only 'grobs' allowed in "gList"
可以理解,因为汇总函数不生成图形对象。除了根本不包括汇总统计信息之外,关于如何克服这一挫折有什么想法吗?
嗨,在结合了这里的几个建议之后,我设法弄清楚了如何在遍历我的数据集的不同特征之后,将每个特征的汇总统计数据绘制为一个 grob 对象。
library(skimr)
library(GridExtra)
library(ggplot2)
library(dplyr)
mysumplots <- list() # new empty list
for (i in seq(2,ncol(dataset))){
local({
i <-
sampletable <- data.frame(skim((dataset[ ,i]))) #creates a skim data frame
summarystats<-select(sampletable, stat, formatted) #select relevant df columns
summarystats<-slice(summarystats , 4:10) #select relevant stats
p3<-tableGrob(summarystats, rows=NULL) #converts df into a tableGrob
mysumplots[[i]] <<- p3 # summary #appends the grob of to a list of summary table grobs
})
}
do.call("grid.arrange", c(mysumplots, ncol=3)) # use grid arrange to plot all my grobs
这样做是为每一列(特征)创建一个略读数据框,然后我选择了相关的统计数据,并将该 grob 分配给变量 p3,然后将其迭代地附加到每个特征的 tablegrobs 列表中。然后我使用 gridarrange 将所有 tableGrobs 打印出来!
上下文:我有一个包含 50 多个特征的数据集,我想为每个特征生成一个箱线图、直方图和汇总统计数据,以供展示之用。这使得 150 多个地块。我用来执行上述操作的代码是这样的:
library(ggplot2)
library(dplyr)
library(ggpubr)
library(ggthemes)
library(Rmisc)
library(gridExtra)
myplots <- list() # new empty list
for (i in seq(2,5,3)){
local({
i <- i
p1 <- ggplot(data=dataset,aes(x=dataset[ ,i], colour=label))+
geom_histogram(alpha=.01, position="identity",bins = 33, fill = "white") +
xlab(colnames(dataset)[ i]) + scale_y_log10() + theme_few()
p2<- ggplot(data=dataset, aes( x=label, y=dataset[ ,i], colour=label)) +
geom_boxplot()+ylab(colnames(dataset)[ i]) +theme_few()
p3<- summary(dataset[ ,i])
print(i)
print(p1)
print(p2)
print(p3)
myplots[[i]] <<- p1 # histogram
myplots[[i+1]] <<- p2 # boxplot
myplots[[i+2]] <<- p3 # summary
})
}
myplots[[2]]
length(myplots)
n <- length(myplots)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(myplots, ncol=nCol)) # PROBLEM: cant print summary as grob
我创建了一个图表列表,每 3 个元素代表每个特征的直方图、箱线图和摘要的结果。我遍历了 50 多个特性中的每一个,将每个结果附加到我的列表中(我知道这不是最好的方法)。当我尝试通过网格排列打印列表时,我 运行 遇到以下问题:
Error in gList(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, height = 1, :
only 'grobs' allowed in "gList"
可以理解,因为汇总函数不生成图形对象。除了根本不包括汇总统计信息之外,关于如何克服这一挫折有什么想法吗?
嗨,在结合了这里的几个建议之后,我设法弄清楚了如何在遍历我的数据集的不同特征之后,将每个特征的汇总统计数据绘制为一个 grob 对象。
library(skimr)
library(GridExtra)
library(ggplot2)
library(dplyr)
mysumplots <- list() # new empty list
for (i in seq(2,ncol(dataset))){
local({
i <-
sampletable <- data.frame(skim((dataset[ ,i]))) #creates a skim data frame
summarystats<-select(sampletable, stat, formatted) #select relevant df columns
summarystats<-slice(summarystats , 4:10) #select relevant stats
p3<-tableGrob(summarystats, rows=NULL) #converts df into a tableGrob
mysumplots[[i]] <<- p3 # summary #appends the grob of to a list of summary table grobs
})
}
do.call("grid.arrange", c(mysumplots, ncol=3)) # use grid arrange to plot all my grobs
这样做是为每一列(特征)创建一个略读数据框,然后我选择了相关的统计数据,并将该 grob 分配给变量 p3,然后将其迭代地附加到每个特征的 tablegrobs 列表中。然后我使用 gridarrange 将所有 tableGrobs 打印出来!