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

如何在R语言中基于自定义尺寸区间绘制直方图?

如何在R中绘制自定义区间的直方图?

没问题,我来帮你修改R代码实现自定义区间的直方图绘制,分两种常见场景给你说明:

场景1:直接用已有的区间和频数绘制

如果你已经明确知道各区间的频数(就是你给出的4、20、52这些数值),可以手动构造直方图对象或者用条形图模拟,代码如下:

# 定义你的自定义区间断点和对应频数
breaks <- c(1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4)
freqs <- c(4, 20, 52, 142, 205, 307, 445)

# 方法1:构造标准直方图对象并绘制
custom_hist <- list(
  breaks = breaks,
  counts = freqs,
  density = freqs / diff(breaks),  # 可选:计算密度值
  mids = (breaks[-1] + breaks[-length(breaks)])/2,  # 区间中点
  xname = "Age区间",
  equidist = FALSE
)

plot(custom_hist, main = "Age自定义区间直方图", xlab = "Age范围", col = "lightblue")

# 方法2:用条形图更直观展示频数(适合已知频数的情况)
interval_labels <- paste0(breaks[-length(breaks)], ":", breaks[-1])
barplot(freqs, names.arg = interval_labels, 
        main = "Age区间频数分布", xlab = "区间", ylab = "频数", col = "lightgreen")

场景2:从原始数据中按自定义区间统计后绘制

如果你还是要基于Huentelauquen数据集里的特定Regime数据来统计绘制,只需修改hist()函数的breaks参数为你定义的区间即可,代码如下:

# 提取目标数据:第一个Regime对应的Age(如果需要log转换就用log(Age))
target_age <- Huentelauquen$Age[Huentelauquen$Regime == unique(Huentelauquen$Regime)[1]]

# 定义你的自定义区间断点
custom_breaks <- c(1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4)

# 绘制双图布局的直方图
op <- par(mfrow = c(1, 2))
# 第一个图:原始Age的自定义区间直方图
hist1 <- hist(target_age, breaks = custom_breaks,
              main = unique(Huentelauquen$Regime)[1],
              xlab = "Age", col = "lightblue")

# 如果需要log转换后的自定义区间,先计算log断点
log_custom_breaks <- log(custom_breaks)
hist2 <- hist(log(target_age), breaks = log_custom_breaks,
              main = paste(unique(Huentelauquen$Regime)[1], "(log转换)"),
              xlab = "log(Age)", col = "lightgreen")
par(op)

注意事项

  • 如果你要的自定义区间是针对log(Age)的,直接把custom_breaks替换成log转换后的数值就行
  • hist()的breaks参数接受数值向量,会严格按照你设定的区间分组统计,非等距区间的柱子宽度会自动调整
  • 如果想让非等距区间的柱子宽度一致,用barplot模拟会更合适

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:37:17