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
相关产品推荐
相关产品推荐

