我在使用ES时使用ESS以便留在Emacs中。每当我创建一个绘图时,会出现一个带有图形的新弹出窗口。这个新窗口似乎是Emacs内部调用的R进程的一部分。因此,新窗口不是缓冲区列表的一部分,似乎位于Emacs环境之外。
R可以创建一个新窗口,包含例如plot()或ggplot2 / lattice中的各个函数调用的图形被强制保留在Emacs环境中?因此该图可用作新的缓冲区。
谢谢!
答案 0 :(得分:9)
哦,是的,它可以......
在ESS中,请执行以下操作:
png(file="tmp.png")
plot(1:10)
dev.off()
# [[tmp.png]]
无。现在做ESC X iimage-mode(是的,两个我在那里)。
这会将缓冲区置于iimage次模式,它应该发现[[tmp.png]]并将图像加载到那里。这应该很容易自动化。这是我第一次为自己发现这个,所以可能有更好的方法来做到这一点。
在ESS清单上显然有一些关于此事的喋喋不休:
https://stat.ethz.ch/pipermail/ess-help/2009-August/005474.html
但我很惊讶它还没有在ESS核心......
答案 1 :(得分:3)
不,对不起,它不能。 Emacs缓冲区是文本。图形窗口是图形设备。
但你可以自己做。在绘制之前,甚至在会话开始之前,请说
pdf(file="/tmp/myplotfile.pdf")
现在情节会去那里。然后你可以在Emacs中打开pdf文件,最近的版本包括在Emacs中的pdf预览(至少在我的Linux boxen上,不确定我是否需要额外的模式)。那将接近你的要求。
答案 2 :(得分:0)
试试这个:
X11() # starts a X11 graphics device
plot(c(1:10),c(1:10))
savePlot(filename = "try_save_X11.png",type = c("png"))
答案 3 :(得分:0)
此解决方案非常引人注目,可能对您不起作用,因为它会影响ESS之外的工作流程。但是exwm是emacs中的X窗口管理器,它允许您将非emacs窗口用作emacs缓冲区。它将使您可以将R图用作emacs缓冲区,并可以使用通常的emacs窗口和缓冲区键绑定进行完全管理。
这是一个非常简单的示例,以显示如下内容:
答案 4 :(得分:0)
这不能完全回答OP的问题,因为它不在ESS范围内,但可能与某些问题有关,因为它仍然与使用R生成可以在Emacs内部查看的图形有关。
您可以使用Emacs iPython Notebook(ein)执行此操作。您必须先设置Jupyter,但此后非常简单,并且可以使用不同的内核(R,Python,Julia等)。下面是屏幕截图