在 RStudio 之外运行 R 时,绘图将默认显示在弹出窗口中,例如由 macOS 上的 quartz
设备、Unix 上的
X11
设备、Windows 上的
windows
设备提供。这些“交互式”设备的一个特殊功能是,手动调整绘图窗口的大小会导致重新绘制绘图以适应新的尺寸。这个功能真的太实用了!
默认交互设备的一个缺点是速度相对较慢。 {ragg} 包提供了替代图形设备,例如
ragg::agg_png()
,其渲染速度明显比默认设备快,而且通常看起来也更好。不幸的是,这些设备无法响应调整大小 - 您必须在渲染之前手动指定绘图的尺寸。在 RStudio 中,可以交互地使用 {ragg} 作为后端。在这种情况下,绘图预览由 {ragg} 渲染,调整窗格大小会导致预览重新渲染。我认为这是由 RStudio 魔法在幕后提供支持的,而不是由 R 提供支持。
我想要什么
实现自动调整大小。我希望我的绘图由 {ragg} 渲染/绘制,出现在浮动窗口中,并在调整此窗口大小时重新绘制。 我尝试过的事情
我希望默认的quartz
我能够使用系统默认的 png 查看器创建由 {ragg} 驱动的交互式设备的模仿 - 这种方法的主要缺点是当我调整窗口大小时不会重新绘制绘图:
options(device = function() {
file <- tempfile("last_plot_", fileext = ".png")
ragg::agg_png(file, height = 480 * 5, width = 480 * 5, scaling = 5)
withr::defer(
{
dev.off()
browseURL(file)
},
sys.frame(1)
)
})
我当前的设置是使用 VS Code,但我从你的问题推断你想使用更轻量级的编辑器/REPL。
httpgd 很好地集成,请参阅此支持页面。他们为您提供此代码片段 .Rprofile
:
if (interactive() && Sys.getenv("TERM_PROGRAM") == "vscode") {
if ("httpgd" %in% .packages(all.available = TRUE)) {
options(vsc.plot = FALSE)
options(device = function(...) {
httpgd::hgd(silent = TRUE)
.vsc.browser(httpgd::hgd_url(history = FALSE), viewer = "Beside")
})
}
}
当更改为以下内容时,给了我一个很好的可点击(至少在 iTerm 中)URL:if (interactive() && Sys.getenv("TERM_PROGRAM") == "iTerm.app") {
httpgd_installed <- try(find.package("httpgd"), silent = TRUE)
if (!inherits(httpgd_installed, "try-error")) {
options(device = function(...) {
httpgd::hgd(silent = TRUE)
message("httpgd running at: ", httpgd::hgd_url(history = FALSE))
})
}
}
示例会话:
> plot(1:10, 1:10*3)
httpgd running at: http://127.0.0.1:58930/live?history=FALSE&token=zsHkpKzo
> plot(1:10, 1:10*3)
> httpgd::hgd_close()
null device
1
> plot(1:10, 1:10*3)
httpgd running at: http://127.0.0.1:58948/live?history=FALSE&token=CEQRWBS1
ps:
radianREPL 是 VS Code 扩展也依赖的裸 R REPL 的一个很好的替代品。值得一看。