我有一个函数,该函数既返回一些统计信息,又使用R基础图形进行绘图。我想从该函数中取消绘图,而是将绘图作为对象返回,以便可以从函数外部控制绘图与否。
我尝试过:
使用gridGraphics
包,我可以按照this question中的建议将基本图形图转换为对象:
plot(1:10)
grid.echo()
a = grid.grab()
grid.draw(a)
剩下的问题是plot()
命令绘制了我想抑制的图形。因此,我试图通过绘制到answer here建议的临时文件中的设备来抑制它。代码变为:
ff = tempfile()
svg(filename = ff)
plot(1:10)
grid.echo()
a = grid.grab()
dev.off()
unlink(ff)
但是现在grid.echo()
找不到任何要回显的图形,并引发警告:
Warning message:
In grid.echo.recordedplot(recordPlot(), newpage, prefix, device) :
No graphics to replay
我将这个问题追溯到grid.echo()
上,无论是否存在临时文件中,都无法从Rstudio默认设备之外的其他设备回显图形。这本身很奇怪,因为grid.echo()
文档说它回显了当前设备的图形,没有提及任何限制。
任何人都可以通过建议如何解决损坏的尝试或通过其他方法来帮助我解决抑制基本图形图并将其作为对象返回的问题吗?
答案 0 :(得分:0)
LocoGris解决了this有关UPDATE Cars
SET PriceEuro = CASE @Value WHEN 'EURO' THEN Price
WHEN 'DOLLARS' THEN Price*1.2
ELSE Price*0.5 END
行为的问题。
以下代码将不需要的图形输出绘制到临时文件中,在取消链接临时文件之前使用grid.echo
和grid.echo
将图形另存为网格对象,以便仅保留图形对象,从而生成期望的行为:
grid.grab
与所讨论代码的区别在于,将R基本图形中的绘图放入函数中并传递给ff = tempfile()
svg(filename = ff)
plotfun <- function() plot(1:10)
grid.echo(plotfun)
a = grid.grab()
dev.off()
unlink(ff)
,而不是依靠grid.echo
从当前设备中自动查找所需内容
可能有用的注释:grid.echo
将绘制两次,如果使用不带tempfiles的常规grid.echo
可以看到,因为两个文件将以相同的曲线出现。我假设第一个图是在R基本图形中,第二个图是使用网格系统的回波。