如何使用ggplot2绘制与plotly效果一致的COVID-19分年龄组发病率多线图
垂直连线问题的核心成因
整合后的数据集incidencia1中,每个流行病学周(epiweek)会对应多个不同年龄组的发病率值。如果在绘制折线时没有明确指定按年龄组拆分独立连线的规则,ggplot2会默认把同一x坐标下的所有数据点串联起来,最终生成突兀的垂直连线,完全偏离分年龄组绘制独立折线的预期效果。
复现plotly绘图效果的实现方法
只要在ggplot的基础美学映射中,把年龄分组变量同时映射为颜色和分组规则,让ggplot2识别出“同一年龄组下的点才需要按流行病学周的顺序串联成线”,再匹配对应的线条样式、配色、标题参数,就能和之前plotly绘制的效果完全对齐。
可直接运行的参考代码:
library(ggplot2) ggplot(data = incidencia1, aes( x = epiweek, y = inc, colour = grupo_edad, group = grupo_edad # 关键参数:显式指定按年龄组拆分独立折线 )) + # 绘制虚线,匹配原plotly的线条样式 geom_line(linetype = "dashed", linewidth = 0.8) + # 手动匹配原plotly的配色方案 scale_color_manual( values = c( "0 a 15" = "#16e3ff", "15 a 25" = "#00c9e4" # 其余年龄组的颜色映射可在此处补充 ) ) + # 匹配原plotly的标题、坐标轴标签内容 labs( 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", x = "Semana Epidemiológica", y = "Tasa x 100.000 habitantes" ) + theme_minimal()
实操注意点
- 虽然ggplot2对离散型颜色变量存在自动识别分组的逻辑,但遇到数据排序错位、存在缺失值的场景时,自动识别经常失效。显式书写
group = grupo_edad是最稳妥的避免连线错乱的方式 - 如果需要保留散点展示效果,可在
geom_line()后叠加geom_point(size = 1.5),实现线点结合的展示样式 - 若需要调整线条虚实、粗细,直接修改
geom_line()中的linetype、linewidth参数即可,和plotly的线条参数逻辑基本一致
内容的提问来源于stack exchange,提问作者MARIO ANTONIO CASTILLO MACHUCA
相关产品推荐
相关产品推荐

