2016-12-25 76 views
0

我有数百个TimeSeries线条,每条线条对应于一组参数的唯一值。我把所有的数据放在一个大的数据框中。数据看起来是这样的(含270米的TimeSeries):Shiny + ggplot2:根据用户输入在一个图形中绘制多条线条

> beginning 
    TimeSeriesID TimeSeries Par1 Par2 Par3 Par4 Par5 
1   1 3936.693 51 0.05 1 1 True 
2   1 3936.682 51 0.05 1 1 True 
3   1 3945.710 51 0.05 1 1 True 
4   1 3937.385 51 0.05 1 1 True 
5   1 3938.050 51 0.05 1 1 True 
6   1 3939.387 51 0.05 1 1 True 

> end 
     TimeSeriesID TimeSeries Par1 Par2 Par3 Par4 Par5 
3600452   270 -16.090 190 0.025 5 5 False 
3600453   270 -21.120 190 0.025 5 5 False 
3600454   270 -14.545 190 0.025 5 5 False 
3600455   270 -23.950 190 0.025 5 5 False 
3600456   270  -4.390 190 0.025 5 5 False 
3600457   270  -3.180 190 0.025 5 5 False 

我所试图实现的是为有光泽的应用程序,允许用户改变他想要的参数,获取用户输入并绘制所有满足时间序列这些值在一个阴谋。因此,在给定用户输入的情况下,绘图将显示不同的行数 - 从一个(当所有参数设置为指定值时)到270(当没有选择参数时,绘制所有TimeSeries)。

到目前为止我没有成功,所以没有什么我可以分享的,可以帮助解决问题,尽管我花了很多天在它上面。到目前为止,我一直试图使用reactivePlot()并通过在ggplot2中添加geom_line()来指定行。现在我正试图查看aes()参数是否有可能实现我所需要的。我也读过关于通过reshape2将数据转换为长格式的信息,但我不确定这是我需要的,因为我正在处理TimeSeries数据。

预先感谢您。

+0

您可以先的光泽外的图形,直到你的情节明确了。您可能想要将TimeSeriesID映射到组或颜色或填充,例如'aes(...,group = as.factor(TimeSeriesID))'。 –

+0

@RomanLuštrik:谢谢,是的,我试图先分开制作剧情。请问您能更具体一点以了解如何实现它吗?其次,情节需要互动。在给定用户指定参数的情况下,我如何在Shiny中更新它? – pun11

回答

0

最后我去了一个基本的R解决方案。并不完美,但我适应需求:

equityplot.IDs <- function() 
    { 
    bounds <- c(-6000, 100000) #c(min(sapply(eq.list, min)), max(sapply(eq.list, max))) 
    colors <- rainbow(length(outputIDs()[[2]])) 
    j <- 1 
    indexy <- c(0, 6000) 
    # Plot 
    plot(NULL,xlim=indexy,ylim=bounds) 
    for (i in 1:length(equitieslist)) 
    { 
     if(i %in% outputIDs()[[2]]) 
     { 
     profit <- rev(equitieslist[[i]][,1]) #$Profit1) 
     lines(1:length(profit), profit, col=colors[j]) 
     j <- j + 1 
     } 
    } 
    } 

经过试验,目前正与这方面的工作:

ggpokus <- function(n) { 

    mymin <- function(N = n){ 
    m <- Inf 
    for (i in 1:N) 
    { 
     g <- length(equitieslist[[i]][,1]) 
     if (g < m) {m <- g} 
    } 
    return (m) 
    } 

    mylength <- mymin() 
    # t <- paste("qplot(1:", mylength, ", rev(equitieslist[[", 1, "]][,1])[1:", mylength, "], geom = \"line\")", sep = "") 
    t <- paste("qplot(1:", mylength, ", rev(equitieslist[[", 1, "]][,1])[1:", mylength, "], geom = \"line\", ylim = c(0, 5000))", sep = "") 
    cols <- rainbow(n) 
    for (i in 1:n) { 
    p <- paste("rev(equitieslist[[", i+1, "]][,1])[1:", mylength, "])", sep = "") 
    c <- paste("\"", cols[i+1], "\"", sep = "") # paste("cols[", i, "]", sep = "") 
    t <- c(paste(t, " + geom_line(aes(y = ", p,", colour = ", c, ")", sep = "")) 
    } 
    # cat(t) 
    # cat("\n") 
    return (t) 
} 

options(expressions=10000) 
z <- ggpokus(1619) 

eval(parse(text=z))