R语言:如何用bias()结果创建数据框并通过ggplot绘制散点图?
问题解答
1. sku_analysis数据框的创建问题
你当前创建的sku_analysis语法上是正确的,但属于宽格式数据框,这种格式并不适配ggplot的可视化逻辑——ggplot更适合处理长格式(tidy data):每行对应一个独立观测,列对应明确的变量类别(如SKU名称、偏差值)。
宽格式的问题在于,每个SKU的偏差被存为单独一列,ggplot无法将这些列识别为同一类别的分组数据。推荐重构为长格式,两种实现方式:
# 方式1:直接创建长格式数据框 sku_analysis <- data.frame( SKU = c("SKUA", "SKUB", "SKUC", "SKUD"), bias = c(SKUA_bias, SKUB_bias, SKUC_bias, SKUD_bias) ) # 方式2:从已有宽格式转换(依赖tidyverse) library(tidyverse) sku_analysis_wide <- data.frame(SKUA_bias, SKUB_bias, SKUC_bias, SKUD_bias) sku_analysis <- sku_analysis_wide %>% pivot_longer(cols = everything(), names_to = "SKU", values_to = "bias") %>% mutate(SKU = stringr::str_remove(SKU, "_bias")) # 移除SKU名称中的_bias后缀
2. 用ggplot绘制散点图的方法
你之前的ggplot代码错误在于:aes()参数中不能同时传入多个x变量,ggplot要求x、y对应单一的变量列。由于每个SKU仅对应一个偏差值,散点图的合理逻辑是:x轴为SKU名称,y轴为偏差值,每个点代表对应SKU的预测偏差。
基础绘图代码
library(ggplot2) ggplot(data = sku_analysis, aes(x = SKU, y = bias)) + geom_point(size = 3) + # 放大点的尺寸,提升可读性 labs( x = "SKU编号", y = "预测偏差(Bias)", title = "各SKU预测偏差对比" ) + theme_minimal()
y轴设置说明
- 默认情况下,ggplot会根据偏差值的范围自动调整y轴刻度。如果需要手动定制:
- 指定y轴范围:
scale_y_continuous(limits = c(-60, 20))(可根据你的实际偏差值调整) - 自定义刻度间隔:
scale_y_continuous(breaks = seq(-60, 20, 10))
- 指定y轴范围:
- 若要突出“预测完全准确(偏差=0)”的基准线,可添加一条参考线:
ggplot(data = sku_analysis, aes(x = SKU, y = bias)) + geom_point(size = 3) + geom_hline(yintercept = 0, color = "red", linetype = "dashed") + # 红色虚线基准线 labs(x = "SKU编号", y = "预测偏差(Bias)", title = "各SKU预测偏差对比") + theme_minimal()
内容的提问来源于stack exchange,提问作者Christian Krahenbuhl
相关产品推荐
相关产品推荐

