使用 R 和 plot.ly - 如何编写脚本将输出保存为网页
Posted
技术标签:
【中文标题】使用 R 和 plot.ly - 如何编写脚本将输出保存为网页【英文标题】:Using R and plot.ly - how do I script saving my output as a webpage 【发布时间】:2016-04-07 09:54:52 【问题描述】:我想使用 R 和 plot.ly 制作一些交互式图表。当我在 R-Studio 中运行以下代码时,它会生成一个交互式图表。
library(plotly)
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
plot_ly(d, x = carat, y = price, text = paste("Clarity: ", clarity),
mode = "markers", color = carat, size = carat)
生成此图后,当我单击 R-Studio 绘图窗口中的“导出”按钮时,我可以选择将绘图保存为网页。如何编写将生成的绘图保存为网页的过程?我的最终目标是从 bash 脚本中迭代地运行 Rscripts 以生成多个网页。
【问题讨论】:
【参考方案1】:将plot_ly
对象分配给一个变量,然后使用htmlwidgets::saveWidget()
保存实际文件,如下所示:
library(plotly)
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
p <- plot_ly(d, x = carat, y = price, text = paste("Clarity: ", clarity),
mode = "markers", color = carat, size = carat)
htmlwidgets::saveWidget(as_widget(p), "index.html")
【讨论】:
这看起来非常令人鼓舞。除了 plotly 和 htmlwidgets,您还使用哪些软件包?我收到一条错误消息,说 R 找不到函数“as.widget”。我正在运行 R 并加载了以下包:plotly、htmlwidgets、htmltools、knitr。我应该加载另一个包吗?以下是完整的错误消息:resolveSizing(x, x$sizingPolicy, Standalone = Standalone, knitrOptions = knitrOptions) 中的错误:找不到函数“as.widget”as.widget
是 part of plotly,但它是在 12 月底才添加的,因此您可能运行的是旧版本的库。
嗯,刚刚更新(现在正在运行 2.0.16 版),我仍然遇到同样的错误......
CRAN 的 plotly 版本是 2.0.16,是在 12 月 20 日构建的。as.widget
是在 12 月 23 日添加的,所以它还没有在 CRAN 上。使用 devtools 从 GitHub 安装开发版本:devtools::install_github("ropensci/plotly")
,它应该可以工作。
函数默认保存到工作目录。不过,您可以选择任何您想要的路径:htmlwidgets::saveWidget(as.widget(p), "/path/to/wherever/blah.html")
【参考方案2】:
为 R-3.5.1 和 plotly-4.8.0 更新 Andrew 的 answer,即:
library(plotly)
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
p <- plot_ly(d, x = ~carat, y = ~price, text=~paste("Clarity : ", clarity))
htmlwidgets::saveWidget(as_widget(p), "index.html")
为了将它发送到work,您还需要安装 pandoc。在 CentOS/RedHat 上做yum install pandoc pandoc-citeproc
。在 Mac OSX 上,使用 homebrew,执行 brew install pandoc
。
此解决方案已经过测试,适用于 OSX 10.13.6,适用于 R-3.5.1。
【讨论】:
以上是关于使用 R 和 plot.ly - 如何编写脚本将输出保存为网页的主要内容,如果未能解决你的问题,请参考以下文章
在 PyQt5 GUI 中使用 Dash (plot.ly)
Pandas GroupBy 对象不是 Plot.ly 的“可序列化”对象