如何在R中绘制按类别统计计数的表格数据并自定义分箱
R类别计数表格可视化及分箱方案
一、直接利用原始表格的x、y列绘制带标签的柱状图
你之前只传入y向量绘图无法关联x信息,是因为没有指定x轴的标签映射,两种常用实现方式如下:
1. 基础R实现
# 构造示例数据,实际使用时可以用read.table/read.csv读取你的表格 df <- data.frame( x = c(100,90,80,70,60,50,40,30,20,10), y = c(1954,106,700,27,861,32,5491,936,7364,408) ) # 直接绘制,names.arg参数指定x轴标签,无需手动添加 barplot( height = df$y, names.arg = df$x, xlab = "类别x", ylab = "出现次数y", col = "skyblue" )
2. ggplot2实现(更推荐,后续调整样式更方便)
library(ggplot2) ggplot(df, aes(x = factor(x), y = y)) + geom_col(fill = "skyblue") + # geom_col默认直接用y值作为柱高,不需要额外统计转换 labs(x = "类别x", y = "出现次数y") + theme_minimal()
二、多类别场景的分箱聚合绘图
当类别数量过多时,先对x做分箱、再聚合对应y的总和后绘图即可,以你要求的「≤50」和「>50」两个分箱为例:
library(dplyr) library(ggplot2) # 1. 生成分箱标签,breaks参数可自定义分箱断点 df$bin <- cut( df$x, breaks = c(-Inf, 50, Inf), # 分箱区间:负无穷到50,50到正无穷 labels = c("≤50", ">50"), # 对应分箱的显示标签 include.lowest = TRUE ) # 2. 按分箱聚合总出现次数 bin_df <- df %>% group_by(bin) %>% summarise(total_count = sum(y)) # 3. 绘制分箱后的柱状图 ggplot(bin_df, aes(x = bin, y = total_count)) + geom_col(fill = "coral") + labs(x = "分箱区间", y = "总出现次数") + theme_minimal()
如果需要调整分箱粒度,只需要修改cut函数的breaks参数即可:比如要每20个单位为一个箱,就设置breaks = seq(0, 100, 20),再对应调整labels参数即可。
内容的提问来源于stack exchange,提问作者LauraR
相关产品推荐
相关产品推荐

