我想在一个独立的窗口中显示一个绘图对象,该对象的行为类似于使用基本 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插件工作。