实时、自动更新的R语言增量绘图

21

我正在尝试制作一个动态图表,类似于自动更新、增量式、可能实时的图表。 我想要做到像这个视频中展示的效果: http://www.youtube.com/watch?v=s7qMxpDUS3c

目前我已经完成了一部分工作。假设你有一个叫做temp的数据框(data.frame),里面存储了时间序列。第一列是时间,第二列是数值。

for(i in 1: length(temp$Time[1:10000]))
{
flush.console()
plot(temp$Time[i:i+100],temp$Open[i:i+100],
xlim=c(as.numeric(temp$Time[i]),as.numeric(temp$Time[i+150])),
ylim=c(min(temp$Open[i:i+100]),max(tmep$Open[i:i+120])))
Sys.sleep(.09)
}

这段代码是逐步绘制图形的,但我没有得到100个单位长度的时间序列,而只是一个点在更新。


"tmep$Open" 是一个打字错误吗?应该是 'temp',不是吗?你是从会话中粘贴过来的吗?这应该会给你一个警告... - Spacedman
length(temp$Time[1:10000])总是会是10000,即使向量不超过10000(它将用NA进行填充)。for(i in 1:10000)应该就可以了。 - Spacedman
Spacedman,感谢您的回复。第一个是打字错误。第二个不应该对实际结果产生任何影响。事实上,我尝试了一下,它并没有做任何事情。 - user1507176
临时变量如何随着数据的输入(例如来自文件)而更新? - Campa
1个回答

27

你想要做类似于这样的事情吗?

n=1000
df=data.frame(time=1:n,y=runif(n))
window=100
for(i in 1:(n-window)) {
    flush.console()
    plot(df$time,df$y,type='l',xlim=c(i,i+window))
    Sys.sleep(.09)
}

浏览您的代码:

# for(i in 1: length(temp$Time[1:10000])) { 
for (i in 1:10000) # The length of a vector of 10000 is always 10000
    flush.console()
    # plot(temp$Time[i:i+100],temp$Open[i:i+100],
    # Don't bother subsetting the x and y variables of your plot.
    # plot() will automatically just plot those in the window.
    plot(temp$Time,temp$Open, 
    xlim=c(as.numeric(temp$Time[i]),as.numeric(temp$Time[i+150]))
    # Why are you setting the y limits dynamically? Shouldn't they be constant?
    # ,ylim=c(min(temp$Open[i:i+100]),max(tmep$Open[i:i+120])))
    Sys.sleep(.09)
}

2
哇塞,你是我最喜欢的人!我非常爱你!这正是我想要实现的。谢谢大师。回答你上一个问题。它不是恒定的,因为它们是例如第二数据的开放价格? - user1507176
1
@nograpes,非常有用,谢谢!我怀疑这不适用于ggplot。你知道有没有类似的ggplot2解决方案吗? - Zhubarb
https://dev59.com/_YXca4cB1Zd3GeqPK52r - Zhubarb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接