Ось X расширяется за пределы окна графика в анимированном линейном графике [plotly] [r] - PullRequest
0 голосов
/ 29 октября 2018

Я создаю анимированный линейный график, показывающий тренд в 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"
    )
...