R-shinylive app
Demostración
Este es un ejemplo de una aplicación Shiny que visualiza datos de Gapminder, incluyendo un gráfico de expectativa de vida vs GDP y un mapa interactivo con información detallada de cada país.
Puedes seleccionar un continente en el menú desplegable para filtrar los datos y ver la visualización correspondiente con el botón Play
. Además, puedes hacer clic en un país en el gráfico para ver su ubicación en el mapa.
NOTA: Espera ~ 1
minuto para que cargue la aplicación interactiva.
#| standalone: true
#| viewerHeight: 600
library(shiny)
library(plotly)
library(ggplot2)
library(gapminder)
library(leaflet)
library(RColorBrewer)
library(dplyr)
library(maps)
# Cargar los datos de Gapminder
data("gapminder")
# Obtener las coordenadas de los países usando maps
world_coords <- map_data("world") %>%
group_by(region) %>%
summarise(long = mean(long), lat = mean(lat))
# Renombrar la columna "region" a "country" para que coincida con gapminder
colnames(world_coords)[1] <- "country"
# Combinar los datos de gapminder con las coordenadas
gapminder_df <- gapminder %>%
left_join(world_coords, by = "country")
# Definir la interfaz de usuario (UI)
ui <- fluidPage(
titlePanel("Visualización de Datos Interactiva"),
sidebarLayout(
sidebarPanel(
# Selector de continente
selectInput("continent", "Selecciona el continente:",
choices = unique(gapminder_df$continent)),
# Selector de país para el mapa (comentado)
# selectInput("country", "Selecciona un país para el mapa",
# choices = unique(gapminder_df$country))
),
mainPanel(
# Gráfico de Expectativa de vida vs GDP
plotlyOutput("lifeExp_vs_gdp"),
# Mapa interactivo
leafletOutput("map")
)
)
)
# Definir el servidor
server <- function(input, output) {
# Filtrar los datos según el continente seleccionado
filtered_data <- reactive({
gapminder_df %>% filter(continent == input$continent)
})
# Gráfico de Expectativa de vida vs GDP
output$lifeExp_vs_gdp <- renderPlotly({
ggp_for_plotly <- ggplot(filtered_data(), aes(x = gdpPercap, y = lifeExp, color = continent)) +
geom_point(alpha = 0.5, aes(
size = pop,
frame = year,
ids = country
)) +
scale_x_log10(labels = scales::dollar_format()) +
geom_smooth(method = NULL, se = TRUE) +
labs(title = "Expectativa de vida vs GDP per cápita",
x = "GDP per cápita (escala logarítmica)",
y = "Expectativa de vida") +
theme_minimal()
ggplotly(ggp_for_plotly)
})
# Mapa interactivo
output$map <- renderLeaflet({
# Filtrar los datos del continente seleccionado
country_data <- gapminder_df %>% filter(continent == input$continent)
# Verificar si hay coordenadas disponibles
if (nrow(country_data) == 0 || all(is.na(country_data$long)) || all(is.na(country_data$lat))) {
# Si no hay coordenadas, mostrar un mensaje en el mapa
leaflet() %>%
addTiles() %>%
addMarkers(lng = 0, lat = 0, popup = "Coordenadas no disponibles para este continente.")
} else {
# Si hay coordenadas, mostrar el continente en el mapa
leaflet(country_data) %>%
addTiles() %>%
addMarkers(lng = ~long, lat = ~lat,
popup = ~paste("País: ", country, "<br>",
"Continente: ", continent, "<br>",
"Expectativa de vida: ", lifeExp, "<br>",
"GDP per cápita: ", gdpPercap))
}
})
}
# Ejecutar la aplicación Shiny
shinyApp(ui = ui, server = server)