我正在尝试绘制任意数量的条形图,其中rmarkdown由2列分隔。在我的例子中,将有20个总图,所以我希望在每列中得到10个图,但是,我似乎无法使用grid.arrange
plot.categoric = function(df, feature){
df = data.frame(x=df[,feature])
plot.feature = ggplot(df, aes(x=x, fill = x)) +
geom_bar() +
geom_text(aes(label=scales::percent(..count../1460)), stat='count', vjust=-.4) +
labs(x=feature, fill=feature) +
ggtitle(paste0(length(df$x))) +
theme_minimal()
return(plot.feature)
}
plist = list()
for (i in 1:20){
plist = c(plist, list(plot.categoric(train, cat_features[i])))
}
args.list = c(plist, list(ncol=2))
do.call("grid.arrange", args.list)
当我把它编织成html时,我得到以下输出:
我希望我能得到以下内容:
但即便如此,数字尺寸仍然很时髦,我尝试使用heights
和widths
,但仍然没有运气。如果这是一个很长的问题,请道歉
答案 0 :(得分:1)
如果列表中包含所有ggplot
个对象,则可以通过gridExtra::grid.arrange
轻松构建两个列图形。这是一个简单的例子,它将8个图形放入4x2矩阵中。
library(ggplot2)
library(gridExtra)
# Build a set of plots
plots <-
lapply(unique(diamonds$clarity),
function(cl) {
ggplot(subset(diamonds, clarity %in% cl)) +
aes(x = carat, y = price, color = color) +
geom_point()
})
length(plots)
# [1] 8
grid.arrange(grobs = plots, ncol = 2)