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 中工作。
我想在独立 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 中工作。