R使用ggplot绘制DataFrame时按数值分两色显示,解决线条跳连问题
问题原因
你在aes中传入colour = X > 5时,ggplot会默认将该逻辑向量作为分组变量,所有满足X > 5的观测会被归为同一分组,geom_line会自动将同一分组内的点按x轴顺序连接,就出现了你说的阈值以上点被额外连线的问题。
解决方案
推荐拆分图层实现需求:仅用geom_line绘制阈值以下的连续线段,阈值以上的点单独用geom_point渲染,既保留原有显示逻辑,也不会出现多余连线:
ggplot(df, aes(x = date, y = values)) + # 仅绘制X<=5的连续线段,保留原有颜色映射逻辑 geom_line(aes(colour = X > 5), data = ~subset(.x, X <= 5)) + # 绘制所有点,按X>5规则着色 geom_point(aes(colour = X > 5))
如果需要保留线段在阈值位置的断开效果,也可以用ifelse将阈值以上的y值替换为NA,geom_line遇到NA会自动断连:
ggplot(df, aes(x = date, y = values, colour = X > 5)) + geom_line(aes(y = ifelse(X > 5, NA, values))) + geom_point()
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

