我将多个绘图放在一个图像中,gridExtra::grid.arrange并且希望可以选择将组合绘图保存为可以作为返回对象列表的一部分从函数内返回的对象.理想情况下,我想在不打印绘图对象的情况下执行此操作.
下面的代码创建了两个图,将它们组合在一起grid.arrange,并尝试将结果保存到x.但是,x评估NULL并打印图表.可以使用关闭grid.arrange我的文档arrangeGrob和建议绘图plot=FALSE,但是当我尝试这个因为FALSE不是grob对象时我收到错误.
对我不理解的任何建议?
# R under development
# Windows 7 (32 bit)
# ggplot2 1.0.0
# gridExtra 0.9.1
p1 <- ggplot(mtcars, aes(x=factor(cyl), y=mpg)) + geom_boxplot()
p2 <- ggplot(mtcars, aes(x=factor(cyl), y=wt)) + geom_boxplot()
x <- gridExtra::grid.arrange(p1, p2)
x
Run Code Online (Sandbox Code Playgroud)
根据评论,我正在添加此编辑.当我尝试时arrangeGrob,我根本没有输出.
> gridExtra::arrangeGrob(p1, p2)
> print(gridExtra::arrangeGrob(p1, p2))
Error: No layers in plot
> x <- gridExtra::arrangeGrob(p1, p2)
> x
Error: No layers in …Run Code Online (Sandbox Code Playgroud) 因为到目前为止我在stackoverflow上读了很多类似的问题,所以在没有将ggplot2更新到开发版本的情况下我找不到一个好的解决方案.
我的问题是,我有几个脚本用于arrangeGrob从单个图形中创建组合图形.我将它们保存到变量和print这个变量中和/或保存它ggsave.由于我的很多同事经常更新包(这是我认为的好事),我总是收到邮件,我的脚本在更新后不再有效gridExtra 2.0.0.
我不知道如何处理这个,因为ggplot2问题解决的新版本仍在开发中.我找到一篇关于堆栈溢出的文章,如果要保存的对象是一个,ggplot因为新arrangeGrob函数返回一个gtable对象,就删除了一个测试,但是在我的情况下这个失败了:
library(ggplot2)
library(grid)
library(gridExtra)
a <- data.frame(x=c(1,2,3),
y=c(2,3,4))
p <- ggplot(a, aes(x, y)) + geom_point()
b <- arrangeGrob(p, p)
grid.draw(b)
ggsave('test.pdf', b)
ggsave <- ggplot2::ggsave
body(ggsave) <- body(ggplot2::ggsave)[-2]
ggsave('test.pdf', b)
Run Code Online (Sandbox Code Playgroud)
控制台上的一些输出和错误:
d> grid.draw(b)
d> ggsave('test.pdf', b)
Error in ggsave("test.pdf", b) : plot should be a ggplot2 plot
d> ggsave <- ggplot2::ggsave
d> body(ggsave) <- body(ggplot2::ggsave)[-2]
d> ggsave('test.pdf', …Run Code Online (Sandbox Code Playgroud) 我对R有点新鲜 - 我一直试图将R脚本包装成一个函数,所以我可以从Rserve中调用它.有谁知道为什么ggplot2不能在函数内部工作但在它之外工作得很好?
png('polarity.png')
ggplot(sent_df, aes(x=polarity)) +
geom_bar(aes(y=..count.., fill=polarity)) +
scale_fill_brewer(palette="RdGy") +
labs(x="polarity categories", y="number of conversatins") +
opts(title = "Sentiment Analysis of Posts on Facebook\n(classification by polarity)",
plot.title = theme_text(size=12))
dev.off()
Run Code Online (Sandbox Code Playgroud)
这可能与它有关ggplot2在函数或S4中使用时产生错误但是我没有得到我能检测到的错误 - 我只是没有输出.