R语言ggplot2绘制预测散点并添加月度实际值红线红点
R ggplot2 多预测值对应单实际值散点图实现方法
核心实现逻辑
现有代码已经完成了带精度等级着色、横向抖动的预测值绘制,只需要新增两个独立图层标注实际值即可,注意不要让实际值图层继承预测值的精度等级颜色映射,避免着色混乱。
完整可运行代码
library(ggplot2) # 提取每月唯一实际值,避免重复绘制 real_value_subset <- unique(df[, c("date", "real_value")]) ggplot(df, aes(x = date, y = pred_value, color = factor(acc_level))) + # 原有预测值抖动散点层 geom_point(size = 2, alpha = 0.7, position = position_jitter(w = 0.1, h = 0)) + # 绘制实际值红色水平短标识线,长度和抖动范围匹配 geom_segment( data = real_value_subset, aes( x = as.numeric(date) - 0.1, xend = as.numeric(date) + 0.1, y = real_value, yend = real_value ), color = "red", linewidth = 1, inherit.aes = FALSE ) + # 绘制实际值红色标记点,放在上层更醒目 geom_point( data = real_value_subset, aes(x = date, y = real_value), color = "red", size = 3, shape = 18, inherit.aes = FALSE ) + # 可选:优化图例和坐标轴标签 labs( x = "统计月份", y = "指标数值", color = "预测精度等级\n(数值越小精度越高)" ) + theme_bw()
关键参数说明
- 提前用
unique()提取去重的月度实际值子集,避免同一个月的实际值被重复绘制多次 - 新增的实际值图层必须设置
inherit.aes = FALSE,否则会继承顶层的color=acc_level映射,无法固定显示为红色 - 短标识线的左右范围设为分类轴坐标±0.1,和设置的抖动宽度
w=0.1完全对齐,视觉效果更协调 - 实际值点选用菱形样式(
shape=18)、更大的尺寸,和圆形的预测值点做明确区分,辨识度更高 - 将
acc_level转为因子型,让颜色映射按离散分类处理,符合精度等级的分类属性
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

