2016-12-25 10 views
0

私は何百ものTimeSeries行を持っており、それぞれは一連のパラメーターの一意の値に対応しています。私はすべてのデータを1つの大きなデータフレームに入れました。データは(270なTimeSeriesを含む)のようになります。Shiny + ggplot2:ユーザー入力に基づいて1つのグラフに複数の行をプロットする

私が達成しようとしています何
> 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 

は、光沢のあるアプリは、ユーザーは、彼が望んでいるパラメータを変更できるように、ユーザー入力を取得し、満たすすべてなTimeSeriesをプロットするためのものです1つのプロット内のそれらの値。したがって、プロットには、ユーザーの入力に応じて表示される行数が異なります(すべてのパラメーターが指定された場合)から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)) 
関連する問題