ggplot2绘制双折线图报each group consists of only one observation问题咨询
报错原因
你当前的date_of_case列是字符型,ggplot会默认将其识别为离散分类变量,每个日期单独成为一个分组。geom_line需要明确同一个组内的多个观测点才能连线,此时每个组仅包含1个观测值,所以触发报错。geom_point不需要跨点连线,因此可以正常运行。
解决方案
方法1:快速修复,手动指定分组
你只需要在每个geom_line的aes中添加group = 1参数,告知ggplot所有点都属于同一个分组需要连线即可:
ggplot(df, aes(x=date_of_case)) + geom_line(aes(y=Masked, colour="Masked", group = 1)) + geom_line(aes(y=NoMask, colour="NoMask", group = 1))
方法2:长格式绘图(更推荐)
宽格式数据做多系列折线图很容易出现分组异常问题,更推荐先把数据转为长格式再绘图,代码更简洁也不易出错:
# 加载依赖包 library(ggplot2) library(tidyr) # 宽表转长表 df_long <- pivot_longer(df, cols = c(Masked, NoMask), names_to = "group", values_to = "value") # 直接绘图,自动按分组绘制不同折线 ggplot(df_long, aes(x = date_of_case, y = value, color = group, group = group)) + geom_line()
如果需要优化x轴显示,可将字符型日期转换为日期格式,自动适配时间轴逻辑:
df$date_of_case <- as.Date(df$date_of_case, format = "%m/%d/%Y")
内容的提问来源于stack exchange,提问作者Lior133
相关产品推荐
相关产品推荐

