You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ggplot2的geom_line展示y轴为计数的LASSO与Ridge偏差对比结果

报错原因

geom_line默认要求显式指定x和y两个美学映射,你之前使用的直方图函数geom_histogram(你代码里的geom_hist是其缩写)会默认执行分箱计数的统计转换,自动生成y轴的计数值,不需要手动指定y,所以不会报错。

解决方法

方法一:直接在geom_line中指定统计转换

不需要提前处理原始数据,直接在geom_line中指定stat = "bin"调用分箱计数的统计逻辑,自动生成y轴的计数值:

ggplot(bias_data, aes(bias,  color = type)) +
  geom_line(stat = "bin", binwidth = 0.05)

说明:binwidth参数控制分箱的宽度,可根据你的bias数值范围自行调整;折线用color映射比fill映射视觉效果更合理

方法二:提前汇总数据后绘图(灵活度更高)

先对原始数据做分箱计数汇总,再用汇总后的数据绘制折线:

library(dplyr)

# 分箱统计各类型的计数
summary_bias <- bias_data %>%
  # 按bias分箱,可调整breaks参数修改分箱数量/宽度
  mutate(bias_bin = cut(bias, breaks = 20)) %>%
  group_by(type, bias_bin) %>%
  summarise(count = n(), .groups = "drop") %>%
  # 提取分箱中点作为x轴数值
  mutate(
    bin_min = as.numeric(sub("\\((.+),.*", "\\1", bias_bin)),
    bin_max = as.numeric(sub("[^,]*,([^]]*)\\]", "\\1", bias_bin)),
    bin_mid = bin_min + (bin_max - bin_min)/2
  )

# 绘制折线图
ggplot(summary_bias, aes(x = bin_mid, y = count, color = type)) +
  geom_line(linewidth = 1) +
  xlab("bias") +
  ylab("计数")

可选优化方案

如果你是要对比四类bias的分布差异,用密度折线图比计数折线图视觉效果更直观,无需处理分箱参数,代码更简洁:

ggplot(bias_data, aes(bias, color = type)) +
  geom_density(linewidth = 1)

内容的提问来源于stack exchange,提问作者thechair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:06:03