R/plot_corona_br.R

Defines functions plot_corona_br

Documented in plot_corona_br

#' Gráfico do número de casos no Brasil ao longo do tempo para os dados do Brasil.io
#'
#' Esta função plota o crescimento no número de casos no Brasil ao longo do tempo. Há duas opções de gráfico, veja o argumento `tipo` para mais detalhes.
#'
#' @param df Data frame contendo o resultado da busca de `get_corona_br()`
#' @param log Lógico. Se quer manter a escala log no eixo y do gráfico. Padrão log = TRUE. Apenas para `tipo = "numero"`
#' @param tipo Caractere. Padrão `tipo = "numero"` para o número de casos ao longo do tempo. Usar `tipo = "aumento"` para plotar o aumento diário no número de casos
#'
#' @export
#'
#' @importFrom rlang .data
#' @importFrom plyr count
#'
plot_corona_br <- function(df,
                           log = TRUE,
                           tipo = "numero") {
  # definindo data_max para plotr apenas atualizacoes completas
  datas <- plyr::count(df$date[df$last_available_confirmed > 0 & !is.na(df$state)])
  datas$lag <- datas$freq - dplyr::lag(datas$freq)
  if (datas$lag[which.max(datas$x)] < 0) {
    data_max <- max(datas$x, na.rm = TRUE) - 1
  } else {
    data_max <- max(datas$x, na.rm = TRUE)
  }
  # nomes dos eixos
  xlab <- "Data"
  ylab <- "Casos confirmados"
  legenda <- "Fonte: Brasil I/O"

    # tipo = numero
  if (tipo == "numero") {

  df <- df %>%
    dplyr::group_by(., .data$date) %>%
    dplyr::summarise_at(dplyr::vars(.data$last_available_confirmed, .data$last_available_deaths),
                        .funs = sum, na.rm = TRUE) %>%
    dplyr::filter(., .data$date <= data_max)

    if (log == TRUE) {
      df <- df %>% dplyr::mutate(last_available_confirmed = log(.data$last_available_confirmed))
      ylab <- paste(ylab, "(log)")
    }
    p <- ggplot2::ggplot(df, ggplot2::aes(x = .data$date,
                                          y = .data$last_available_confirmed,
                                          color = "red")) +
      ggplot2::geom_line(alpha = .7) +
      ggplot2::geom_point(size = 2) +
      ggplot2::labs(x = xlab,
                    y = ylab,
                    title = "Casos confirmados de COVID-19 no Brasil",
                    caption = legenda) +
      ggplot2::scale_x_date(date_breaks = "60 day",
                            date_labels = "%d/%b") +
      ggplot2::theme_minimal() +
      ggplot2::theme(#axis.text.x = ggplot2::element_text(angle = 90),
                     legend.position = "none")
  }
  if (tipo == "aumento") {

    df <- df %>%
      dplyr::group_by(., .data$date) %>%
      dplyr::summarise_at(dplyr::vars(.data$new_confirmed, .data$new_deaths),
                          .funs = sum, na.rm = TRUE) %>%
      dplyr::filter(., .data$date <= data_max)
    #df$delta_cases <- df$last_available_confirmed - dplyr::lag(df$last_available_confirmed)
    # O.o tem valores negativos! por enquanto, deixei 0 nao bate com min saude

    #df$delta_cases <- ifelse(df$delta_cases < 0 , 0, df$delta_cases)
    #df$diff_perc <- round(df$delta_cases/df$confirmed, 3) * 100
    #df$label <- paste(df$delta_cases, "%")
    p <- ggplot2::ggplot(df, ggplot2::aes(x = .data$date,
                                          y = .data$new_confirmed,
                                          color = "red")) +
      #ggplot2::geom_bar(stat = "identity", alpha = .7, color = "red", fill = "red")
      ggplot2::geom_line(alpha = .7) +
      ggplot2::geom_point(size = 2) +
      ggplot2::scale_x_date(date_breaks = "60 day",
                            date_labels = "%d/%b") +
      # ggplot2::scale_y_continuous(limits = c(0, max(df$delta_cases, na.rm = TRUE) + 3),
      #                             expand = c(0, 0)) +
      # ggplot2::geom_text(ggplot2::aes(label = .data$label),
      #                    size = 2.5,
      #                    vjust = -0.5) +
      ggplot2::labs(x = xlab,
                    y = "Casos novos por dia",
                    title = "Aumento nos casos de COVID-19 confirmados",
                    caption = legenda) +
      ggplot2::theme_minimal() +
      ggplot2::theme(#axis.text.x =  ggplot2::element_text(angle = 90),
                     legend.position = "none")
  }
  p
}
liibre/corona documentation built on Feb. 4, 2021, 10:41 a.m.