我有一个文档加载一些文件,处理它们,然后将Plot.ly图打印到文档中。一切正常,除了试图在另一个函数或循环中调用绘图函数。这是我的代码的结构:
```{r, results='asis', echo=TRUE}
my_plotly_function <- function(my_dataframe, ... ){
suppressPackageStartupMessages(library("plotly"))
my_plot <- plot_ly(data = my_dataframe, x = Column1, y = Column2, mode = "markers")
return(my_plot)
}
sample_file_list <- c("sample4_control.tsv", "sample4_sample5.tsv", "sample5_control.tsv")
# this works
my_plotly_function(read.delim(sample_file_list[1],header = TRUE,sep = '\t'))
# this doesn't work
for(i in seq_along(sample_file_list)){
my_plotly_function(read.delim(sample_file_list[i],header = TRUE,sep = '\t'))
}
# this does not work either
for(i in seq_along(sample_file_list)){
print(my_plotly_function(read.delim(sample_file_list[i],header = TRUE,sep = '\t')))
}
# this also does not work
for(i in seq_along(sample_file_list)){
my_plot <- my_plotly_function(read.delim(sample_file_list[i],header = TRUE,sep = '\t'))
print(my_plot)
}
```
有什么想法吗?我知道在函数或循环中使用时,某些图需要print
',但Plot.ly似乎不像这样工作,它只在返回Plot.ly对象时才起作用直接进入文件。到目前为止,我还没有找到一种方法来使用它而不将其硬编码到文档中,这是不理想的。
答案 0 :(得分:0)
我遇到了完全相同的问题。在寻找解决方案而没有找到解决方案后,我想出了一个我自己的解决方案。它有点像黑客但它有效:
1)通过&lt;&lt; - 将函数内的图形对象设置为全局变量。每个函数我有多个图形对象,所以返回它们没有工作(我试过)。 2)展开循环(在我的情况下可行,因为只有5次迭代) 3)调用全局plot var
答案 1 :(得分:0)
有一个与此post相关的简单方法。
对帖子中给出的示例进行少许更改以允许调用plot_ly
,
library(plotly)
plot_plotly <- function(x) plot_ly(x=x)
l <- htmltools::tagList()
for (i in 1:3) {
l[[i]] <- plot_plotly(rnorm(10))
}
l
关键是使用htmltools::tagList
并将绘图图保存到此列表中,然后打印出来。