Вопрос по r, plot, real-time – Реальное время, автообновление, инкрементальный график в R

17

Я пытаюсь создать динамический график, вроде автоматического обновления, инкрементный, возможно, в режиме реального времени. Я хочу сделать что-то вроде этого http://www.youtube.com/watch?v=s7qMxpDUS3c

Это то, что я сделал до сих пор. Предположим, у вас есть временной ряд в data.frame с именем temp. Первый столбец - это время, а второй столбец - там, где находятся значения.

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 единиц, вместо этого я получаю только одно обновление.

is max (tmep $ Открыть опечатку? Должно быть «temp» »не надо? Вы вставили это из своей сессии? Это должно дать вам предупреждение ... Spacedman
Spacedman, спасибо за ответ. Первая опечатка. Второе не должно вносить никаких изменений в фактический результат. На самом деле я пытался, и он ничего не делал. user1507176
Как temp обновляется, когда поступают данные, например. из файла? Campa
length (temp $ Time [1: 10000]) всегда будет 10000, даже если вектор не длиннее 10000 (он дополняется NA). для (я в 1: 10000) должен делать хорошо. Spacedman

Ваш Ответ

1   ответ
24

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)
}
OMG ты мой любимый! Я по-мужски люблю тебя! это именно то, чего я хотел достичь. Спасибо, гуру. Чтобы ответить на ваш последний вопрос. Это не константа, поскольку они являются открытыми ценами, скажем, для вторых данных? user1507176
@nograpes, это очень полезно, спасибо! Я подозреваю, что это не относится кggplot, Вы знаете подобноеggplot2 решение?

Похожие вопросы