Изменить метки фасетов для ggplot, созданного ggfortify::autoplot

Я пытаюсь изменить метки фасетов для stl Участок разложения выглядит следующим образом:

library(ggplot2)
library(ggfortify)
p <- autoplot(stl(AirPassengers, s.window = 'periodic'), ts.colour = "black", ts.size = 0.2)
p

Сюжет происходит из пакета ggfortify. Я хочу изменить метки фасетов на:

c("Original Data", "Seasonal component", "Trend component", "Remainder")

Я пытался войти в структуру ggplot (много str'ing) и обнаружил, что следующие имена хранят следующие имена:

str(p$layers[[1]]$data$variable)
# Factor w/ 4 levels "Data","seasonal",..: 1 1 1

Тем не менее, когда я изменяю этот фактор на месте. Я получаю четыре пустых участка, за которыми следуют правильные участки:

p$layers[[1]]$data$variable <- factor(p$layers[[1]]$data$variable,
                                      labels=c("Original series", "Seasonal Component", "Trend component", "Remainder"))    

Результат при редактировании фактора на месте

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

1 ответ

Решение

Одной из возможностей является изменение соответствующих компонентов объекта графика.

# generate plot data which can be rendered
g <- ggplot_build(p)

# inspect the object and find the relevant element to be changed
# str(g)

# perform desired changes
g$panel$layout$variable <- c("Original Data", "Seasonal component", "Trend component", "Remainder")

# build a grob and 'draw' it
grid.draw(ggplot_gtable(g))

введите описание изображения здесь

Другие вопросы по тегам