首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:抑制基础图形打印,但将打印作为对象返回

R:抑制基础图形打印,但将打印作为对象返回
EN

Stack Overflow用户
提问于 2019-03-21 23:16:20
回答 1查看 450关注 0票数 2

我有一个函数,既可以返回一些统计数据,又可以使用基于R的图形绘制图形。我想要禁止该函数的绘图,而是将绘图作为对象返回,以便可以从函数外部控制是否绘图。

我试过了:

使用gridGraphics包,我可以按照this question中的建议将基本图形图转换为对象

代码语言:javascript
复制
plot(1:10)
grid.echo()
a = grid.grab()
grid.draw(a)

剩下的问题是plot()命令绘制了我想要隐藏的绘图。因此,我试图像answer here建议的那样,通过绘制到临时文件中的设备来抑制它。代码变成:

代码语言:javascript
复制
ff = tempfile()
svg(filename = ff)
plot(1:10)
grid.echo()
a = grid.grab()
dev.off()
unlink(ff)

但现在,grid.echo()找不到任何要回显的图形,并抛出警告:

代码语言:javascript
复制
Warning message:
In grid.echo.recordedplot(recordPlot(), newpage, prefix, device) :
  No graphics to replay

我已经将这个问题追溯到grid.echo()不能回显来自Rstudio默认设备以外的其他设备的图形,无论是否在临时文件中。这本身就很奇怪,因为grid.echo()文档说它会从当前设备回显图形,但没有提到任何限制。

有没有人可以帮助我解决隐藏基本图形绘图并将其作为对象返回的问题,或者建议如何修复我失败的尝试,或者使用另一种方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 21:24:39

LocoGris解决了this中有关grid.echo行为的问题。

下面的代码将不需要的图形输出绘制到临时文件中,在取消链接临时文件之前,使用grid.echogrid.grab将绘图保存为网格对象,以便只保留绘图对象,从而产生被忽略的行为:

代码语言:javascript
复制
ff = tempfile()
svg(filename = ff)
plotfun <- function() plot(1:10)
grid.echo(plotfun)
a = grid.grab()
dev.off()
unlink(ff)

与正在讨论的代码的不同之处在于,以R为基础的图形中的绘图被放入一个函数并传递给grid.echo,而不是依靠grid.echo从当前设备自动找到它需要的内容。

可能有用的注意事项:grid.echo将绘制两次,如果使用不带临时文件的常规svg(),则可以看到这一点,因为两个文件将显示相同的绘图。我假设第一个图是基于R的图形,第二个是使用网格系统的回声。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55283707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档