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

