我正在尝试遍历数据集并为每个因素创建一个直方图和汇总表,并将输出保存为.svg
. 使用 创建直方图,使用 创建ggplot2
汇总表summary()
。
我已成功使用下面的代码将输出保存到单个.pdf
页面,每个页面都包含相关的直方图/表格。但是,当我尝试将每个直方图/表格组合保存到一组.svg
图像中时,ggsave
仅使用ggplot
直方图显示在.svg
. 该表只是空白区域。
我尝试过使用dev.copy
Cairo
,svg
但最终都得到相同的结果:直方图呈现,但表格没有。如果我将图像保存为.png
表格显示。
我将iris
数据用作可重现的数据集。我没有使用R-Studio
我看到的给其他人造成一些“空情节”的悲伤。
#packages used
library(ggplot2)
library(gridExtra)
library(gtable)
library(Cairo)
#Create iris histogram plot
iris.hp<-ggplot(data=iris, aes(x=Sepal.Length)) +
geom_histogram(binwidth =.25,origin=-0.125,
right = TRUE,col="white", fill="steelblue4",alpha=1) +
labs(title = "Iris Sepal Length")+
labs(x="Sepal Length", y="Count")
iris.list<-by(data = iris, INDICES = iris$Species, simplify = TRUE,FUN = function(x)
{iris.hp %+% x + ggtitle(unique(x$Species))})
#Generate list of data to create summary statistics table
sum.str<-aggregate(Sepal.Length~Species,iris,summary)
spec<-sum.str[,1]
spec.stats<-sum.str[,2]
sum.data<-data.frame(spec,spec.stats)
sum.table<-tableGrob(sum.data)
colnames(sum.data) <-c("species","sep.len.min","sep.len.1stQ","sep.len.med",
"sep.len.mean","sep. len.3rdQ","sep.len.max")
table.list<-by(data = sum.data, INDICES = sum.data$"species", simplify = TRUE,
FUN = function(x) {tableGrob(x)})
#Combined histogram and summary table across multiple plots
multi.plots<-marrangeGrob(grobs=(c(rbind(iris.list,table.list))),
nrow=2, ncol=1, top = quote(paste(iris$labels$Species,'\nPage', g, 'of',pages)))
#bypass the class check per @baptiste
ggsave <- ggplot2::ggsave; body(ggsave) <- body(ggplot2::ggsave)[-2]
#
for(i in 1:3){
multi.plots<-marrangeGrob(grobs=(c(rbind(iris.list[i],table.list[i]))),
nrow=2, ncol=1,heights=c(1.65,.35),
top = quote(paste(iris$labels$Species,'\nPage', g, 'of',pages)))
prefix<-unique(iris$Species)
prefix<-prefix[i]
filename<-paste(prefix,".svg",sep="")
ggsave(filename,multi.plots)
#dev.off()
}
编辑@rawr 引用的已删除主题 tt3。它不小心留在了示例代码中。它没有引起问题,以防万一有人好奇。