2017-01-18 68 views
0

我正在嘗試編寫一個函數,它以用plotly創建的特定順序呈現用戶多個圖塊。用戶打算看到一個情節,然後當輸入按下時,下一個情節出現。 下面是一個示例函數來說明問題:使用plotly(plot.ly)在R中創建多個圖塊

library(plotly) 
test_function <- function(){ 
    set.seed(100) 
    n<-100 
    x1 <- runif(n) 
    y1 <- runif(n) 
    x2 <- runif(n,1,3) 
    y2 <- runif(n,1,3) 

    plot_ly(x= ~x1,y= ~y1,type = "scatter") 
    cat("Hit <Return> to see next plot: ") 
    line <- readline() 
    plot_ly(x= ~x2, y= ~y2, type = "scatter") 
} 

當執行test_function(),只有最後情節被示出。 可以做些什麼來解決問題?

回答

0

正如你注意到的那樣,只有最後一個圖從你的函數返回,所以它是唯一被打印的圖。

你可以只嵌入內printplotly電話:

print(plot_ly(x= ~x1,y= ~y1,type = "scatter")) 
    cat("Hit <Return> to see next plot: ") 
    line <- readline() 
    print(plot_ly(x= ~x2, y= ~y2, type = "scatter")) 

但更好的做法是使用list例如從函數返回的情節和組織你的功能是這樣的:

test_function <- function(){ 
    set.seed(100) 
    n<-100 
    x1 <- runif(n) 
    y1 <- runif(n) 
    x2 <- runif(n,1,3) 
    y2 <- runif(n,1,3) 

    p1 <- plot_ly(x= ~x1,y= ~y1,type = "scatter") 
    p2 <- plot_ly(x= ~x2, y= ~y2, type = "scatter") 
    list(p1,p2) # return the pair of plot 
} 


show_plots <- function(l){ 
    print(l[[1]]) # display plot 1 
    cat("Hit <Return> to see next plot: ") 
    line <- readline() 
    print(l[[2]]) # display plot 2 
} 

show_plots(test_function())