我要做的是创建一个闪亮的应用程序,在散点图上绘制每个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
答案 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))