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

R语言中基于区间分类变量绘制连续年龄轴收益图的方法

解决方法

问题出在你把cut生成的区间分类变量转成了因子,ggplot会把它当作离散类别渲染X轴,所以才会出现重叠的区间标签。要改成连续年龄变量,核心是用每个区间的中点值(或左/右边界)作为X轴的连续数值,而非区间标签。

这里给两种实用的实现方式:

方式一:手动提取区间中点后绘图

先分组计算平均收益,同时从age_int里提取每个区间的中点,再用中点作为连续X轴绘图:

library(dplyr)
library(ggplot2)

# 生成分组统计结果,同时提取区间中点
df_grouped <- df %>%
  # 按30个区间划分年龄
  mutate(age_int = cut(age, breaks = 30)) %>%
  # 分组计算平均收益
  group_by(age_int) %>%
  summarise(av_return = mean(investment_return, na.rm = TRUE)) %>%
  # 从区间标签中提取左右边界,计算中点
  mutate(age_mid = sapply(strsplit(as.character(age_int), "[^0-9.]"), 
                          function(x) mean(as.numeric(x[c(2,3)]))))

# 用连续的年龄中点作为X轴绘图
ggplot(df_grouped, aes(x = age_mid, y = av_return)) +
  geom_point(size = 2) +
  labs(x = "企业年龄", y = "平均投资收益")

方式二:用ggplot内置函数直接分组统计

不用手动生成age_int,直接用stat_summary在绘图时完成分组和均值计算,自动用连续年龄的分组中点作为X轴:

library(ggplot2)

ggplot(df, aes(x = age, y = investment_return)) +
  # 按30个区间分组,计算每组均值并绘制点
  stat_summary(fun = mean, geom = "point", 
               aes(group = cut(age, breaks = 30)),
               size = 2) +
  labs(x = "企业年龄", y = "平均投资收益")

这两种方法都能让X轴显示为连续的年龄数值,不会出现标签重叠的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:09