ggplot и R: две переменные во времени - PullRequest
10 голосов
/ 07 августа 2010

Я хотел бы знать, как сделать так, чтобы x и y в следующем примере набора данных были построены на вертикальной оси для каждого элемента кадра на горизонтальной оси. Как мне сделать это с ggplot2?

x, y = переменные, фрейм = ГГГГММ

Пример данных:

df <- structure(list(x = c(0.000892333625290767, 0.0161153931761482, 
0.0188150880795816, 0.0268699106638318, 0.018657330651898, 0.0101065034206662, 
0.00154410447630379), y = c(1.35172948829027, 0.59654026447333, 
0.685835030118683, 0.741545898152761, 1.09653338596292, 0.119448208345102, 
0.104092642854814), frame = c(200912, 201001, 201002, 201003, 
201004, 201005, 201006)), .Names = c("x", "y", "frame"), row.names = c("1", 
"2", "3", "4", "5", "6", "7"), class = "data.frame")

Мне удалось вывести один график в линию, но, похоже, он не распознает мой фрейм как категориальный (не то, чтобы он был, и я не знаю, как его изменить).

p <- ggplot(df, aes(x=frame, y=x))
p + geom_line()

Ответы [ 2 ]

11 голосов
/ 07 августа 2010

Вам нужно растопить ваши данные:

library(reshape2)
dfm = melt(df, id.vars='frame')
ggplot(dfm, aes(x=frame, y=value, colour=variable)) + geom_line()

Вот что это делает с вашим фреймом данных:

> dfm
    frame variable        value
1  200912        x 0.0008923336
2  201001        x 0.0161153932
3  201002        x 0.0188150881
4  201003        x 0.0268699107
5  201004        x 0.0186573307
6  201005        x 0.0101065034
7  201006        x 0.0015441045
8  200912        y 1.3517294883
9  201001        y 0.5965402645
10 201002        y 0.6858350301
11 201003        y 0.7415458982
12 201004        y 1.0965333860
13 201005        y 0.1194482083
14 201006        y 0.1040926429
9 голосов
/ 22 октября 2012

Это довольно поздний ответ, но если вы хотите, чтобы ваша frame переменная интерпретировала дату (месяц года), то конвертируйте ее в дату.

Затем можно использовать scale_x_date и пакет scales для форматирования оси x

DF <- melt(df, id.vars = 'frame')
# note that I am arbitrarily setting each month to be the 15th 
# day of the month, to create a complete date 
DF$date <- as.Date(paste0(as.character(df$frame), '15'), '%Y%M%d')
library(scales)
ggplot(DF, aes(x =frame, y = value, colour = variable))  +  
 geom_line() + 
 scale_x_date('Month', labels = date_format('%b %Y'), breaks = date_breaks('2 months'))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...