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

R语言复杂直方图制作求助:无法使用ggplot_histogram

搞定你的特殊R直方图需求!

嘿,作为R新手碰到这种非常规的直方图要求确实容易头大,别慌,我一步步给你捋清楚怎么实现——毕竟咱们不能用ggplot_histogram,换个思路就好啦!

第一步:先把数据转换成我们需要的「频次的频次」格式

你的原始数据是一堆重复的数值,我们要先统计每个数值出现了多少次,再统计这些「出现次数」本身又出现了多少次——这才是你要的直方图的核心数据。

先把数据放进R里,然后跑这段代码:

# 把你的原始数据存成向量
data <- c(1,1,1,2,2,3,4,4,4,4,4,6,7,7,8,8,8,8,9,9,9,10,10)

# 第一步:统计每个数值的出现次数
value_counts <- table(data)
# 把结果转成纯数值向量,方便后续统计
freqs <- as.numeric(value_counts)

# 第二步:统计不同频次的出现次数(这就是绘图要用的最终数据)
freq_dist <- table(freqs)
# 转成数据框,后续绘图更方便
freq_df <- as.data.frame(freq_dist)
# 给列改个好懂的名字
colnames(freq_df) <- c("重复频次", "数值出现次数")

跑完之后,freq_df就是我们要的数据集,你可以打印看看:

重复频次 数值出现次数
1        1            2
2        2            3
3        3            2
4        4            1
5        5            1

完全对应你说的例子:2个数值只重复1次,3个数值重复2次,以此类推~

第二步:绘制直方图(两种方案,都避开ggplot_histogram)

方案1:用R基础绘图(简单直接)

基础绘图的barplot就能搞定,把条形宽度设为1、去掉空隙,就是你要的宽度为1的直方图效果:

barplot(freq_df$`数值出现次数`, 
        names.arg = freq_df$`重复频次`, # X轴标签用重复频次
        xlab = "重复频次",
        ylab = "对应重复频次的数值出现次数",
        main = "特殊频次直方图",
        width = 1, # 分箱宽度设为1
        space = 0) # 去掉条形间的空隙,模拟直方图

运行后就能得到符合要求的图啦。

方案2:用ggplot2(但不用geom_histogram)

如果你习惯用ggplot2但不能用geom_histogram,那就用geom_col——因为我们已经提前算好了频次分布,直接画条形图就行,宽度设为1就和直方图一样:

library(ggplot2)

ggplot(freq_df, aes(x = `重复频次`, y = `数值出现次数`)) +
  geom_col(width = 1) + # 宽度设为1,完美模拟分箱
  labs(x = "重复频次",
       y = "对应重复频次的数值出现次数",
       title = "特殊频次直方图") +
  theme_minimal()

这个方案也完全符合你的要求,而且画风更美观。

最后再核对一遍

咱们的结果完全匹配你的需求:

  • X轴是1到5的重复频次(正好5个分箱,每个宽度1)
  • Y轴对应每个频次下有多少个数值:比如重复1次的数值有2个(3和6),所以X=1时Y=2,完全正确~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:44:22