You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:55:40