Временной ряд ggPlotting в R с интервалами по оси x - PullRequest
0 голосов
/ 28 ноября 2018

Я строю временные ряды в R, используя ggplot2.Вместо того, чтобы иметь точки во времени на оси X, я хочу иметь интервалы (например, годы) на оси.Например:

library("ggplot2")
library("xts")

my_data = as.xts(economics[,2:5],order.by=economics$date,frequency="monthly")
my_data_smpl=last(my_data,'10 years')
ppp <- ggplot(data=my_data_smpl) + 
  geom_line(aes(x=index(my_data_smpl),y=psavert))+
  xlab("")
print(ppp)

Этот код приводит к следующим графикам:

plot_with_points_in_time

Что-то, что я хотел бы, выглядит примерно так (обратите внимание на метки перемещенных осей):

plot_with_time_intervals

Может ли это быть сделано автоматически, т.е.Есть ли универсальное / гибкое решение, которое не зависит от ручного перемещения этикеток?Подобные проблемы возникают при работе с более частой датой (например, ежедневные данные) и наличием месяцев на оси.

Спасибо, Фердинанд

1 Ответ

0 голосов
/ 30 ноября 2018

Я подозреваю, что то, что вы на самом деле ищете, это способ использования фасетов со свободными масштабами.Метки фасетов естественным образом располагаются в середине каждой панели графика:

# convert the xts object to data frame, & define date / year explicitly
data <- as.data.frame(my_data_smpl)
data$date <- index(my_data_smpl)
data$year <- format(data$date, "%Y")

p <- ggplot(data = data) +
  geom_line(aes(x = date, y = psavert)) +
  facet_grid(~ year, scales = "free", switch = "x")
p

plot with default theme

Вы также можете настроить внешний вид, чтобы имитировать тот, который вы связанный :

p +
  scale_x_date(expand = c(0, 0)) +
  theme_bw() +
  theme(axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        panel.grid.minor = element_blank(),
        panel.spacing = unit(0, "pt"),
        strip.background = element_blank())

with tweaked theme

...