如何用R的ggplot和plotly绘制带次Y轴的堆叠条形及折线交互图?
Solução para Gráfico Empilhado com Eixo Secundário e Versão Interativa
Primeiro, carregue as bibliotecas necessárias:
library(ggplot2) library(plotly)
Preparar os dados para a linha do percentual vaginal:
# Filtrar apenas registros de parto vaginal para a linha do gráfico vaginal_perc <- subset(data, Tipo_de_Parto == "Vaginal") # Calcular fator de escala para alinhar o percentual (0-100) com o intervalo do eixo principal (n) max_n <- max(data$n[data$n != 0]) # Ignorar o valor 0 de 2021 para melhor escala scale_factor <- max_n / 100
Criar o gráfico base com ggplot:
p <- ggplot(data, aes(x = Ano_do_Nascimento, y = n, fill = Tipo_de_Parto)) + # Barras empilhadas para o número de partos geom_col(position = "stack", alpha = 0.8, aes(text = paste0("Tipo: ", Tipo_de_Parto, "\nNúmero: ", n))) + # Linha e pontos para o percentual vaginal (escalado para o eixo principal) geom_line(data = vaginal_perc, aes(y = perc * scale_factor, group = 1, text = paste0("Percentual Vaginal: ", perc, "%")), color = "#2c3e50", size = 1.2) + geom_point(data = vaginal_perc, aes(y = perc * scale_factor), color = "#2c3e50", size = 3) + # Configurar eixos scale_y_continuous( name = "Número de Partos", sec.axis = sec_axis(~ . / scale_factor, name = "Percentual de Partos Vaginais (%)", breaks = seq(0, 70, 10)) ) + scale_fill_manual(values = c("Cesário" = "#e74c3c", "Vaginal" = "#27ae60")) + # Ajustes de título e tema labs(title = "Evolução do Tipo de Parto por Ano", x = "Ano de Nascimento", fill = "Tipo de Parto") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title.y = element_text(color = "#2c3e50", size = 12), axis.title.y.right = element_text(color = "#2980b9", size = 12), legend.position = "bottom" )
Converter para gráfico interativo com ggplotly e salvar como HTML:
# Criar versão interativa p_interativo <- ggplotly(p, tooltip = "text") %>% layout( hovermode = "x unified", legend = list(orientation = "h", y = -0.2) ) # Salvar como arquivo HTML para uso em páginas web htmlwidgets::saveWidget(p_interativo, "grafico_partos_interativo.html")
Detalhes importantes:
- O fator de escala ajusta o percentual (0-100) para se encaixar no intervalo do eixo principal, já que ggplot não suporta eixos secundários independentes diretamente.
- O ano de 2021 (com valores 0) será exibido como uma barra vazia e a linha de percentual em 0%, sem quebrar o gráfico.
- O gráfico interativo permite passar o mouse sobre elementos para ver valores exatos, e o arquivo HTML gerado pode ser inserido diretamente em páginas web.
内容的提问来源于stack exchange,提问作者Lana Meijinhos
相关产品推荐
相关产品推荐

