R语言ggplot绘图:如何为两组数据设置不同线型?
解决ggplot两组数据线型不区分的问题
你当前代码的核心问题是没有将linetype映射到group变量,导致scale_linetype_manual定义的线型无法关联到分组数据。以下是具体修改方案:
修改思路
把linetype = group添加到全局的aes()中,或者在绘制线条的stat_summary图层的aes()里指定,让ggplot根据group的不同应用对应的线型。同时可以简化多余的group参数(全局已定义分组时,子图层无需重复用interaction指定)。
修改后的完整代码
ggplot(data_zscores, aes(x = cohort, y = zscore, group = group, linetype = group))+ geom_hline(yintercept = 0, color = "grey")+ stat_summary(fun = "mean", geom = "point", size = 1)+ stat_summary(fun = "mean", geom = "line", size = 0.3)+ stat_summary(fun = "mean", geom = "errorbar", width = 0.15, fun.max = function(y) mean(y) + se(y), fun.min = function(y) mean(y) - se(y))+ scale_linetype_manual(values = c("dotdash", "solid"))+ facet_wrap(. ~ condition)+ theme_bw()+ theme(strip.background = element_blank())+ ylab("mean z-accuracy")+ xlab("cohort")+ ggtitle('Difference in accuracy z-score between Y1 and Y3 for each group and condition')
关键修改点说明
- 全局aes添加
linetype = group:这是核心,让ggplot知道用group变量来区分线型,和scale_linetype_manual的设置对应起来。 - 简化子图层的group参数:全局已经通过
group = group指定了分组逻辑,线条和误差棒的子图层无需再用interaction(group)或interaction(group,cohort)重复定义,stat_summary会自动按分组计算均值和误差。
内容的提问来源于stack exchange,提问作者gaelle
相关产品推荐
相关产品推荐

