R 在独立窗口中按绘图打开



我想在一个独立的窗口中显示一个绘图对象,该对象的行为类似于使用基本 Rplot()函数弹出的窗口。

使用来自情节网站的基本示例:

library(ggplot2)
library(plotly)
d <- diamonds[sample(nrow(diamonds), 1000), ]
p <- ggplot(data = d, aes(x = carat, y = price)) +
geom_point(aes(text = paste("Clarity:", clarity))) +
geom_smooth(aes(colour = cut, fill = cut)) + facet_wrap(~ cut)
p2 <- ggplotly(p)

p2对象是一个htmlwidget对象,我使用sizingPolicy元素对其显示进行一些控制,如此处所述。但是,我找不到任何允许我将查看器/浏览器设置为当前浏览器(作为新选项卡)或 RStudio 以外的其他内容。

理想情况下,我希望避免 R 包外部的应用程序从 R 包中启动单独的窗口。但是,我也很乐意弄清楚如何精细地控制浏览器输出以p2显示为展台或应用程序模式下的新窗口(有关展台/应用程序模式的一些示例,请参阅此问题的答案)。

编辑:虽然我在讨论我能够找到的一些选项时提到了 RStudio,但我正在谈论从简单的控制台使用 R。也就是说,粒度显示选项应该独立于用户界面。

我有一个可行的解决方案,但如果有人有更好的答案,我很乐意更改接受的答案。

我定义了一个打印函数,可用于启动htmlwidget对象的自定义浏览器命令。在这种情况下,我使用了chromium-browser -app=...,但总体方法应该是通用的。

print_app <- function(widget) {
# Generate random file name
temp <- paste(tempfile('plotly'), 'html', sep = '.')
# Save. Note, leaving selfcontained=TRUE created files that froze my browser
htmlwidgets::saveWidget(widget, temp, selfcontained = FALSE)
# Launch with desired application
system(sprintf("chromium-browser -app=file://%s", temp))
# Return file name if it's needed for any other purpose
temp
}

结合前面的示例:

library(ggplot2)
library(plotly)
d <- diamonds[sample(nrow(diamonds), 1000), ]
p <- ggplot(data = d, aes(x = carat, y = price)) +
geom_point(aes(text = paste("Clarity:", clarity))) +
geom_smooth(aes(colour = cut, fill = cut)) + facet_wrap(~ cut)
p2 <- ggplotly(p)
print_app(p2)

似乎htmlwidgets通常使用htmltools中的html_print功能,而getOption("viewer", utils::browseURL)又通过选择要使用的浏览器,这烘焙了许多浏览器选择选项 - 这使得更改具有挑战性。

在本地保存 html 文件的想法来自这个plotly问题:在本地保存绘图?

如果您使用的是MacOS,请在@ssokolen的答案中更改此行

# Launch with desired application
system(sprintf("chromium-browser -app=file://%s", temp))

system(sprintf("open -a 'google chrome'  /%s", temp))

在MacOs Catalina的zsh中使用Intellij R插件工作。

相关内容

  • 没有找到相关文章

最新更新