9

我使用 ESS 是为了在使用 R 时留在 Emacs 中。每当我创建一个绘图时,一个新的弹出窗口都会出现在该图中。这个新窗口似乎是 Emacs 内部调用的 R 进程的一部分。因此,新窗口不是缓冲区列表的一部分,并且似乎位于 Emacs 环境之外。

是否可以强制由 R 创建的新窗口(包含 plot() 调用的图形或 ggplot2/lattice 中的相应函数)留在 Emacs 环境中?以便该图可用作新缓冲区。

谢谢!

4

5 回答 5

9

哦,是的,它可以...

在 ESS 中,执行以下操作:

png(file="tmp.png")
plot(1:10)
dev.off()
# [[tmp.png]]

没有。现在执行 ESC X iimage-mode(是的,有两个 i)。

这会将您的缓冲区置于 iimage 次要模式,它应该会发现 [[tmp.png]] 并在其中加载您的图像。这应该很容易实现自动化。这是我第一次为自己发现这一点,所以可能有更好的方法来做到这一点。

ESS 列表上显然有一些关于此的喋喋不休:

https://stat.ethz.ch/pipermail/ess-help/2009-August/005474.html

但我很惊讶它还没有在 ESS 核心中......

于 2011-02-19T21:57:37.017 回答
3

不,对不起,它不能。Emacs 缓冲区是文本。图形窗口是图形设备。

但是你可以自己做。在绘图之前,甚至在会话开始时,说

pdf(file="/tmp/myplotfile.pdf")

现在情节将去那里。然后您可以在 Emacs 中打开 pdf 文件,最近的版本在 Emacs 中包含 pdf 预览(至少在我的 Linux boxen 上,不确定我是否需要额外的模式)。那将接近您的要求。

于 2011-02-19T20:41:34.170 回答
2

这不太可能是您正在寻找的解决方案,因为它涉及将 Emacs 变成一个窗口管理器(适用于 Linux 和 MacOS):包EXWM(Emacs X 窗口管理器)是一个功能齐全的平铺窗口管理器,可以打开所有X 窗口进入 Emacs 缓冲区。

这是一个看起来像的示例(注意右侧的 R 图形窗口,现在是 Emacs 缓冲区):

在此处输入图像描述

这允许您对所有 X 窗口使用 Emacs 键绑定、配置等。

于 2018-07-08T21:55:35.237 回答
1

试试这个:

X11()   #  starts a X11 graphics device
plot(c(1:10),c(1:10))
savePlot(filename = "try_save_X11.png",type = c("png"))
于 2012-01-31T16:02:51.553 回答
1

这并不能完全回答 OP 的问题,因为这超出了 ESS,但它仍然可能与某些相关,因为它仍然与使用 R 生成可以在 Emacs 内部查看的图形有关。

您可以使用Emacs iPython Notebook (ein) 执行此操作。您必须首先设置Jupyter,但之后它非常简单,可以使用不同的内核(R、Python、Julia 等)。下面是截图

ein中R图的截图

于 2018-08-23T01:46:11.550 回答