Barplot итоги по месяцам с ggplot? - PullRequest
5 голосов
/ 16 августа 2010

У меня есть данные временных рядов (я разместил их здесь как data.frame):

x <- structure(list(date = structure(c(1264572000, 1266202800, 1277362800, 
1277456400, 1277859600, 1278032400, 1260370800, 1260892800, 1262624400, 
1262707200), class = c("POSIXt", "POSIXct"), tzone = ""), data = c(-0.00183760994446658, 
0.00089738603087497, 0.000423513598318936, 0, -0.00216496690393131, 
-0.00434836817931339, -0.0224199153445617, 0.000583823085470003, 
0.000353088613905206, 0.000470295331234771)), .Names = c("date", 
"data"), row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10"
), class = "data.frame")

Каков наилучший способ отобразить это в виде гистограммы в ggplot, которая будет показывать общее значение за месяц (с названием месяца в тексте)?

Я могу сделать это вручную, добавив поле месяца:

x$month <- format(x$date, format="%B")
ddply(x, .(month), function(x) sum(x[, "data"]))

Затем вычерчивайте это независимо, но месяцы не упорядочены правильно, используя этот подход (предположим, что мне нужно создать упорядоченный коэффициент?); Я также предполагаю, что с ggplot есть «более простой» способ.

1 Ответ

12 голосов
/ 17 августа 2010

Я ни в коем случае не эксперт с данными временных рядов, но этот код работал для меня:

#The binning by month, saving as a date
x$month <- as.Date(cut(x$date, breaks = "month"))

#Plotting
p <- ggplot(x, aes(month, data))+
     stat_summary(fun.y = sum, geom = "bar")

#My suggestions for display
minmax <- max(abs(x$data))

p + geom_hline(y = 0)+
    scale_x_date(minor = "month")+
    ylim(-minmax, minmax)
    # or more ggplot2 accurately
    #+coord_cartesian(ylim = c(-minmax, minmax))

С моими предложениями вы заканчиваете тем, что выделяете ноль линией, а оси усимметричен относительно 0. Я изменил второстепенные линии сетки оси x на «месяц», потому что столбец для каждого месяца расширялся на несколько недель в каждом направлении, что на самом деле не имеет смысла для агрегирования данных.

Редактировать: Конечно, большая часть этого кода была просто для создания ежемесячных сумм.Если ваши данные в формате даты, шкалы даты автоматически используются для осей.Чтобы изменить основные x-разрывы и их формат, вы должны сделать это с помощью scale_x_date()

p + scale_x_date(major = "month", format = "%b")
#or
p + scale_x_date(major = "month", format = "%B %Y")

См. ?strftime для получения подробной информации о том, что означают строки формата.

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