R:使用有光泽和ggplot2稳定散点图

时间:2017-08-21 18:41:59

标签: r time ggplot2 shiny data-visualization

我要做的是创建一个闪亮的应用程序,在散点图上绘制每个obs的x和y,并在时间变量(t)中循环。

grph dataframe:

id x y t
1  3 8 3 
2  6 2 8   
3  2 6 1 
1  9 4 5  

server.R

library(shiny)
library(ggplot2)

function(input, output) {
  #Store data into df for plotting
  df <- data.frame(grph, header = TRUE)

  #Plot output
  output$plot <- renderPlot({
    dt<-cbind(df,Ftime=as.numeric(df$t))
    dt<-dt[dt$Ftime==input$t,]

    if(nrow(dt)==0) ggplot(df, aes(x,y))
    else ggplot(dt,aes(x,y))+geom_point()
  })
}

ui.R

library(shiny)
library(ggplot2)

fluidPage(
  #Sidebar header
  headerPanel('Demo'),
  #Sidebar panel
  sidebarPanel(
    #Animated sidebar (time converted to mins)
    sliderInput("t", "Time", 
                min = 0,
                max = 1440,
                value = 0, step=1,
                animate=
                  animationOptions(interval=1000, loop=TRUE))
  ),
  #Export graph to main panel
  mainPanel(
    plotOutput('plot')
  )
)

它大部分都在工作,但我目前有两个问题:(1)我无法稳定我的散点图,因为它不断改变图表上x和y的最大值和最小值,以及(2)每个现在它会模糊图表。 Here is an example

1 个答案:

答案 0 :(得分:1)

  

(1)我无法稳定我的散点图,因为它是   不断改变图表上x和y的最大值和最小值

您可以使用相同的df设置边界,然后在geom_point中提供子集数据集。

ggplot(df,aes(x,y)) + geom_point(data = dt)

或者,您可以使用coord_cartesian()并传递完整数据集的最小值/最大值:

ggplot(dt, aes(x,y)) + 
  geom_point() +
  coord_cartesian(xlim = c(min(df$x), max(df$x)),
                  ylim = c(min(df$y), max(df$y)))
  

(2)偶尔它会模糊图形。

您的绘图无法跟上动画的速度。您可以调整间隔。

  

animationOptions(interval = 1000,loop = FALSE,playButton = NULL,
  pauseButton = NULL)

# Animation with custom interval (in ms) to control speed, plus looping
    sliderInput("animation", "Looping Animation:", 1, 2000, 1, step = 10, 
                animate=animationOptions(interval=300, loop=T))