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

如何使用ggplot基于EcoSim输出的区间频数绘制直方图?

如何用ggplot基于EcoSim预计算的区间频数绘制直方图

你已经从EcoSim 7.1得到了直方图的区间范围(最小值、最大值)和对应区间的模拟次数,但之前的ggplot代码无法生成预期的直方图,问题出在你误用了geom_histogram——这个函数是用来从原始观测数据自动分组计算频数并绘图的,而你手里已经是预计算好的分组频数,应该用geom_col(或geom_bar(stat="identity"))来实现。

你的示例数据

Histogram LowHistogram High# Simulations
1.424161.43086443
1.430861.437561672
1.437561.444262679
1.444261.450962263
1.450961.457661546
1.457661.46436857
1.464361.47106320
1.471061.47776112
1.477761.4844639
1.484461.4911619
1.491161.4978533
1.497851.5045516

你尝试的错误代码

histmin <- c(1.424,1.431,1.438,1.444,1.451,1.458,1.464,1.471,1.478,1.484,1.491,1.498)
histmax <- c(1.431,1.438,1.444,1.451,1.458,1.464,1.471,1.478,1.484,1.491,1.498,1.505)
freq <- c(443,1672,2679,2263,1546,857,320,112,39,19,33,16)
ecosimhist <- data.frame(histmin, histmax, freq)
ggplot(ecosimhist, aes(x=freq)) + geom_histogram(bins=12)

正确的实现方法

步骤1:构造精确的数据框

建议使用EcoSim输出的原始精确数值,避免近似值带来的误差:

# 用原始精确值构造数据框
ecosimhist <- data.frame(
  histmin = c(1.42416, 1.43086, 1.43756, 1.44426, 1.45096, 1.45766,
              1.46436, 1.47106, 1.47776, 1.48446, 1.49116, 1.49785),
  histmax = c(1.43086, 1.43756, 1.44426, 1.45096, 1.45766, 1.46436,
              1.47106, 1.47776, 1.48446, 1.49116, 1.49785, 1.50455),
  freq = c(443, 1672, 2679, 2263, 1546, 857, 320, 112, 39, 19, 33, 16)
)

步骤2:计算区间中点(优化x轴显示)

为了让x轴更直观,计算每个区间的中点作为x轴的位置:

ecosimhist$midpoint <- (ecosimhist$histmin + ecosimhist$histmax) / 2

步骤3:用ggplot绘制柱状图(模拟直方图效果)

使用geom_col直接根据预计算的频数绘图,同时可以添加区间标签优化可读性:

library(ggplot2)

ggplot(ecosimhist, aes(x = midpoint, y = freq)) +
  geom_col(width = 0.0067, fill = "#2c3e50", color = "white") + # width匹配区间宽度(0.0067=1.43086-1.42416)
  labs(
    x = "区间范围",
    y = "模拟次数",
    title = "EcoSim模拟结果直方图"
  ) +
  scale_x_continuous(
    breaks = ecosimhist$midpoint,
    labels = paste0(ecosimhist$histmin, " - ", ecosimhist$histmax)
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠

代码说明

  • geom_col:用于绘制已知高度的柱状图,对应你已经有的freq数值,替代需要计算频数的geom_histogram。
  • width:设置柱子宽度,匹配EcoSim输出的区间宽度,让图形更接近传统直方图的样式。
  • scale_x_continuous:自定义x轴标签,显示完整的区间范围,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:22:32