R在独立窗口中打开

时间:2017-05-18 12:53:40

标签: r plotly htmlwidgets

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

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

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对象,我可以使用here所述的sizingPolicy元素控制其显示。但是,我无法找到任何允许我将查看器/浏览器设置为当前浏览器以外的其他内容(作为新选项卡)或RStudio中的内容。

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

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

2 个答案:

答案 0 :(得分:1)

我有一个有效的解决方案,但如果有人做得更好,我会很乐意改变已接受的答案。

我定义了一个print函数,可用于为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通常使用html_print中的htmltools函数,后者又选择要通过getOption("viewer", utils::browseURL)使用的浏览器,这会在很多浏览器中进行烘焙选择选项 - 使改变变得具有挑战性。

本地保存html文件的想法来自plotly问题:saving plotly plots locally?

答案 1 :(得分:0)

如果您使用的是 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 中工作。