我想在独立窗口中显示一个绘图对象,其行为与使用基本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。也就是说,粒状显示选项应该与用户界面无关。
答案 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 中工作。