R 闪亮的+;ggplot2:基于用户输入在一个图形中绘制多条线
我有数百条TimeSeries行,每条都对应于一组参数的唯一值。我把所有数据放在一个大数据框中。数据如下所示(包含270个时间序列): 我试图实现的是,Shining应用程序允许用户改变他想要的参数,获取用户输入,并在一个绘图中绘制满足这些值的所有时间序列。因此,根据用户的输入,绘图将显示不同的行数-范围从1(当所有参数设置为指定值时)到270(当未选择任何参数时,将绘制所有时间序列) 到目前为止,我还没有成功,所以我无法分享任何有助于解决这个问题的东西,尽管我花了很多天的时间在这个问题上。到目前为止,我一直在尝试使用R 闪亮的+;ggplot2:基于用户输入在一个图形中绘制多条线,r,plot,ggplot2,shiny,R,Plot,Ggplot2,Shiny,我有数百条TimeSeries行,每条都对应于一组参数的唯一值。我把所有数据放在一个大数据框中。数据如下所示(包含270个时间序列): 我试图实现的是,Shining应用程序允许用户改变他想要的参数,获取用户输入,并在一个绘图中绘制满足这些值的所有时间序列。因此,根据用户的输入,绘图将显示不同的行数-范围从1(当所有参数设置为指定值时)到270(当未选择任何参数时,将绘制所有时间序列) 到目前为止,我还没有成功,所以我无法分享任何有助于解决这个问题的东西,尽管我花了很多天的时间在这个问题上。到目
reactivePlot()
并通过在ggplot2中添加geom_line()
来指定线。现在,我试图研究aes()
参数是否有可能实现我所需要的。我也读过关于通过重塑2将数据转换为长格式的文章,但我不确定这是我需要的,因为我正在处理TimeSeries数据
提前感谢您。最后,我选择了BaseR解决方案。不完美,但适合我的需要:
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
}
}
}
equityplot.IDs您可以首先使图形在外部发亮,直到确定绘图为止。您可能想将TimeSeriesID
映射到一个组或颜色或填充,例如aes(…,group=as.factor(TimeSeriesID))
@RomanLuštrik:谢谢,是的,我正在尝试先单独绘制。你能不能说得更具体一点,如何实现这一目标?其次,情节需要互动。在给定用户指定参数的情况下,如何更新它?
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))