使用R中的plotly(plot.ly)创建多个绘图

时间:2017-01-18 01:41:57

标签: r ggplot2 plotly

我正在尝试编写一个函数,向用户显示使用plotly创建的特定顺序的多个图。用户打算查看绘图,然后按下输入时,将显示下一个绘图。 这是一个示例函数来说明问题:

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()时,仅显示最后一个图。 可以做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:0)

正如您所注意到的,只有最后一个绘图从您的函数返回,因此它是唯一一个打印的图。

您可以在plotly内嵌入print次来电:

  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())