【问题标题】:multiple lines plot with ggplot, geom_line()使用 ggplot、geom_line() 绘制多条线
【发布时间】:2021-06-06 07:47:59
【问题描述】:

我想在同一个图表中绘制多条线。每条线代表一个年龄组 (grupo_edad)。 x 轴是通知病例的周(epiweek),y 轴是发病率(inc)。

这是我的数据:

inc_015



当我使用 plotly 时,结果是完美的:

p <- plot_ly()%>%
  layout(title = "Curvas de tasas de incidencia de casos notificados de COVID-19 \n en la Región Metropolitana, según grupo etario y semana epidemiológica primeros síntomas",
         xaxis = list(title = "Semana Epidemiológica"),
         yaxis = list (title = "Tasa x 100.000 habitantes") ) %>% 
  add_trace(x = inc_015$epiweek, y = inc_015$inc, type = 'scatter', mode = 'line', name = '0 a 15', 
            line=list(color='#16e3ff',dash='dashed')) %>% 
  add_trace(x = inc_1525$epiweek, y = inc_1525$inc, type = 'scatter', mode = 'line', name = '15 a 25',
            line=list(color='#00c9e4',dash='dashed'))
p

但当我尝试使用 ggplot 时,结果完全不同,点是垂直连接的

ggplot(data=incidencia1,
       aes(x=epiweek, y=inc, colour=grupo_edad)) +
  geom_point()

谁能告诉我如何在 ggplot2 中显示我用 plotly 制作的相同图表?

【问题讨论】:

  • 嗨。首先,geom_point() 根本不应该是连接点。 geom_line() 按 X 的顺序连接它们。geom_path() 按出现在数据框中的顺序连接它们。除此之外,您的 ggplot2 代码看起来是正确的,应该可以按预期工作。
  • 其次,您的情节示例不等同于 ggplot。您不是通过变量着色,而是显式地绘制两条单独的线。您始终可以像 plotly 那样拆分数据框并绘制两条单独的线。
  • 最后,当您粘贴大表时,人们很难重新创建您的示例。 dput() 的输出会非常有用。或者在这种情况下,数据看起来像公共 covid 数据,因此指向源的链接将是最简单的选择。

标签: r ggplot2 linechart


【解决方案1】:

对于ggplot2,您需要指定group 美学,在这种情况下它与colour 相同

ggplot(data=incidencia1,
       aes(x=epiweek, y=inc, group=grupo_edad, colour=grupo_edad)) +
  geom_point() + geom_line()

【讨论】:

  • group 不是自动指定为所有其他指定美学的组合(colourfillshape 等)吗? ggplot2.tidyverse.org/reference/aes_group_order.html 指定 colour 就足够了。 group只有在你想覆盖自动分组时才需要指定。
  • 并非如此 - 我将更新答案,并通过演示数据对小组进行一些详细说明。
【解决方案2】:

如果有人需要答案,这里是解决方案:

incidencia1$grupo_edad <- incidencia1$grupo_edad %>% as.factor()

f <- ggplot(data=incidencia1,
        aes(x=epiweek, y=inc, group=grupo_edad, col=grupo_edad)) +
        geom_path() + 
        scale_color_manual(name = 'Grupo Etario', labels = c("0-14", "15-24", '25-49', '50-64', '65-80', '>=80'), 
                                      values = c("#FDD700", 'red', "#FE882D", "darkolivegreen3", 'darkblue', 'deepskyblue3')) +
        theme_ipsum_rc(grid = 'Y') + theme(axis.text.x = element_text(angle = 90)) +
        xlab('Semana Epidemiológica') +
        ylab('Tasa de Incidencia') + theme(axis.text.x = element_text(angle = 90)) +
        labs(title = 'Curvas de tasas de incidencia de casos notificados de COVID-19', 
             subtitle = 'Región Metropolitana, según grupo etario y semana epidemiológica primeros síntomas')

f

感谢@Sinh Nguyen,很抱歉不知道如何给你贴标签

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多