R-скрипт, ggplot2 и qplot, несколько графиков временных рядов на одном графике - PullRequest
2 голосов
/ 03 февраля 2012

Я хочу иметь несколько «линий» на одном графике. Несколько точек данных.

В моем примере, как я могу включить точки данных 'xa' и 'xb'.

Это то, что у меня есть только для одного набора данных, но я хочу два. Как я могу изменить этот скрипт.

library(ggplot2)

da <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00")
db <- c(0.4, 0.6, 0.5)

xa <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00")
xb <- c(0.3, 0.43, 0.7)

da2 <- as.POSIXct(da)
dfx <- data.frame(da2, db)

summary(dfx)

png('time_data_errs6b.png', width=640, height=480)
gg <- qplot(da2, db, colour='red')+
    opts(title = 'Requests App')+xlab('Time')+ylab('Requests') +
    geom_line()

print(gg)
dev.off()

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

Я бы сделал два data.frames и merge их с помощью переменной времени.

> df.a<-data.frame(time=da, value.a=db)
> df.b<-data.frame(time=xa, value.b=xb)
> df.mix<-merge(df.a, df.b, by='time')

> df.mix
                 time value.a value.b
1 2012-02-02 09:01:00     0.4    0.30
2 2012-02-02 09:02:00     0.6    0.43
3 2012-02-02 09:03:00     0.5    0.70

Конвертируйте в POSIXct, как вы, а затем растопите его в длинный формат.

> df.mix$time<-as.POSIXct(df.mix$time)
> df.melt<-melt(df.mix, id.vars='time')

ggplot очень хорошо работает с данными длинного формата, поэтому обычно моя цель состоит в том, чтобы получить данные в подходящую структуру с melt и merge перед построением графика.

> ggplot(df.melt, aes(x=time, y=value, colour=variable)) + geom_path()

Мне также нравится использовать базуggplot вместо qplot для моей собственной читабельности.но это вопрос предпочтения.

2 голосов
/ 03 февраля 2012

Это гораздо более простой подход, без необходимости merge или melt данных.

df_a <- data.frame(time = da, value = db)
df_b <- data.frame(time = xa, value = xb)
ggplot(df_a, aes(x = as.POSIXct(time), y = value)) +
  geom_line(col = 'red') + 
  geom_line(col = 'blue', data = df_b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...