R 独立打开 window

R open plotly in standalone window

我想在独立 window 中显示一个 plotly plot 对象,它的行为类似于使用基本 R plot() 函数弹出的 window。

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

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 元素对其显示进行一些控制,如 here 所述。但是,我找不到任何允许我将 viewer/browser 设置为当前浏览器(作为新选项卡)或 RStudio 以外的东西的东西。

理想情况下,我想避免 R 包之外的应用程序从 R 内部启动单独的 window。但是,我也很高兴弄清楚如何精细地控制浏览器输出以显示 p2 作为自助服务终端或应用程序模式中的新 window(有关 kiosk/app 模式的一些示例,请参阅 this question 的答案)。

编辑: 虽然我在讨论我能够找到的一些选项时提到了 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 问题:saving plotly plots locally?.

如果您使用的是 MacOS,请更改@ssokolen 的回答中的这一行

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

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

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