Я создаю анимированный линейный график, показывающий тренд в IMR за определенный период времени.
Когда я делаю тренд за один год, график корректно изменяется и помещается в окно графика.
Когда я сталкиваюсь с неприятностями, я получаю пятилетнее скользящее среднее. Я думаю, что метки заставляют ось X расширяться за пределы окна графика. Я могу обойти это, запустив сначала график, а затем изменив его размер, но это противоречит цели, если мне нужно отправить его сторонней стороне. Эта расширенная ось показана здесь. Я также экспортировал его в HTML-виджет, чтобы проверить его за пределами RStudio, и закончил с той же проблемой.
Итак, мне интересно, могут ли люди, более сведущие в заговоре, иметь представление о том, как заставить xaxis вести себя соответственно. Код ниже.
Пакеты в сюжете / dplyr.
Данные
structure(list(yr2 = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L,
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L,
21L, 22L, 23L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L,
12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L,
16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 1L, 2L, 3L, 4L, 5L, 6L,
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L,
20L, 21L, 22L, 23L), .Label = c("1991-1995", "1992-1996", "1993-1997",
"1994-1998", "1995-1999", "1996-2000", "1997-2001", "1998-2002",
"1999-2003", "2000-2004", "2001-2005", "2002-2006", "2003-2007",
"2004-2008", "2005-2009", "2006-2010", "2007-2011", "2008-2012",
"2009-2013", "2010-2014", "2011-2015", "2012-2106", "2013-2017"
), class = "factor"), raceth = structure(c(2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("1. All", "2. White, NH",
"3. Black, NH", "4. Hispanic"), class = c("ordered", "factor"
)), rates = c(7.2, 7, 6.8, 6.7, 6.7, 6.8, 6.6, 6.6, 6.4, 6.3,
6.3, 6.3, 6.4, 6.4, 6.3, 6, 5.8, 5.5, 5.2, 5, 5, 5, 4.9, 19.9,
20.5, 19.4, 16.6, 16.5, 15.2, 14.5, 14.3, 15.3, 15.6, 16.6, 16.2,
17.1, 16.7, 16.5, 15.6, 14.7, 13.6, 13.9, 12.9, 12.6, 13.1, 12.6,
7.8, 6.6, 6.7, 6.5, 5.9, 6.1, 6.5, 6.5, 6.9, 7.1, 7.5, 7.2, 7.4,
7.4, 7.5, 7.3, 7.4, 7.5, 7.2, 7.6, 7.5, 7.2, 6.9, 8.2, 8, 7.8,
7.4, 7.3, 7.3, 7.1, 7.1, 7, 7, 7.2, 7.1, 7.3, 7.4, 7.4, 7.1,
6.9, 6.6, 6.4, 6.3, 6.2, 6.1, 6.1)), class = "data.frame", row.names = c(NA,
-92L))
Создание фреймов
accumulate_by <- function(dat, var) {
var <- lazyeval::f_eval(var, dat)
lvls <- plotly:::getLevels(var)
dats <- lapply(seq_along(lvls), function(x) {
cbind(dat[var %in% lvls[seq(1, x)], ], frame = lvls[[x]])
})
dplyr::bind_rows(dats)
}
object2 <- im_rate2
d2 <- object2 %>%
accumulate_by(~yr2)
Создать график
p2 <- d2 %>%
plot_ly(
x = ~yr2,
y = ~rates,
split = ~raceth,
frame = ~frame,
type = 'scatter',
mode = 'lines',
line = list(simplyfy = F)
) %>%
layout(xaxis = list(
title = "Period",
zeroline = F,
type ='category',
tickangle=45
),
yaxis = list(
title = "Infant Mortality Rate (per 1,000 live births)",
zeroline = F,
hoverformat ='.1f'
)
) %>%
animation_opts(
frame = 500,
transition = 500,
redraw = FALSE
) %>%
animation_slider(
hide = F
) %>%
animation_button(
x = 1, xanchor = "right", y = 0, yanchor = "bottom"
)