Nothing
#' Grafico de notas por mes
#'
#' Esta funcion genera un grafico de linea que muestra la cantidad de publicaciones agrupadas por mes.
#'
#' @param datos Data frame con los datos procesados, que debe incluir la columna `fecha` en formato YYYY-MM-DD.
#' @param titulo Texto que aparecera en el titulo del grafico.
#' @param fecha_inicio Fecha de inicio para la construccion del grafico en formato YYYY-MM-DD (opcional).
#' @param fecha_fin Fecha de finalizacion para la construccion del grafico en formato YYYY-MM-DD (opcional).
#' @return Un grafico ggplot2 que muestra la cantidad de publicaciones por mes.
#' @examples
#' \dontrun{
#' datos <- extraer_noticias_fecha("cambio climatico", "2024-01-01","2025-01-01", subir_a_bd = FALSE)
#' grafico_notas_por_mes(datos, titulo = "Cambio Climatico",
#' fecha_inicio = "2024-01-01", fecha_fin = "2024-06-06")
#' }
#'
#' @export
grafico_notas_por_mes <- function(datos, titulo, fecha_inicio = NULL, fecha_fin = NULL) {
# Validar que 'datos' sea un data frame
warning("La funcion 'grafico_notas_por_mes()' esta desactualizada. Se recomienda usar 'grafico_notas_fecha()'.")
if (!is.data.frame(datos)) {
stop("'datos' debe ser un data frame.")
}
# Validar que 'fecha' exista en los datos
if (!"fecha" %in% colnames(datos)) {
stop("'datos' debe contener la columna 'fecha'.")
}
# Validar que 'titulo' sea texto
if (!is.character(titulo)) {
stop("'titulo' debe ser texto (string).")
}
# Convertir 'fecha' a formato fecha
datos <- datos %>%
dplyr::mutate(fecha = as.Date(fecha, format = "%Y-%m-%d"))
# Filtrar por rango de fechas si se especifican
if (!is.null(fecha_inicio) || !is.null(fecha_fin)) {
if (!is.null(fecha_inicio)) {
fecha_inicio <- as.Date(fecha_inicio, format = "%Y-%m-%d")
} else {
fecha_inicio <- min(datos$fecha, na.rm = TRUE)
}
if (!is.null(fecha_fin)) {
fecha_fin <- as.Date(fecha_fin, format = "%Y-%m-%d")
} else {
fecha_fin <- max(datos$fecha, na.rm = TRUE)
}
# Validar que las fechas sean validas
if (fecha_inicio > fecha_fin) {
stop("'fecha_inicio' debe ser anterior o igual a 'fecha_fin'.")
}
# Filtrar datos por rango
datos_filtrados <- datos %>%
dplyr::filter(fecha >= fecha_inicio & fecha <= fecha_fin)
} else {
# Usar todo el rango de fechas disponible
datos_filtrados <- datos
}
# Verificar si hay datos despues del filtrado
if (nrow(datos_filtrados) == 0) {
stop("No hay datos en el rango de fechas seleccionado.")
}
# Agrupar datos por mes y contar las publicaciones
publicaciones_por_mes <- datos_filtrados %>%
dplyr::mutate(fecha = lubridate::floor_date(fecha, "month")) %>%
dplyr::group_by(fecha) %>%
dplyr::summarise(cantidad = dplyr::n(), .groups = "drop") %>%
dplyr::arrange(fecha)
# Generar el grafico
grafico <- ggplot2::ggplot(publicaciones_por_mes, ggplot2::aes(x = fecha, y = cantidad)) +
ggplot2::geom_line(color = "blue", linewidth = 1) +
ggplot2::geom_point(color = "red", size = 1) +
ggplot2::geom_smooth(method = "loess", color = "green", se = FALSE, linewidth = 1) +
ggplot2::labs(
title = titulo,
x = "Fecha",
y = "Cantidad de Notas"
) +
ggplot2::theme_minimal() +
ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 45, hjust = 1))
# Devolver el grafico
return(grafico)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.