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

基于Gnuplot绘制相同X值数据的均值与置信区间

Gnuplot绘制分组均值与置信区间(yerrorlines样式)

我来帮你搞定这个Gnuplot绘制均值和置信区间的问题!根据你的需求,我们需要先对第9列值相同的样本分组统计第13列的均值、标准差和样本数,再计算置信区间的上下限,最后用yerrorlines样式绘制。下面是完整的实现方案:

完整代码示例

# 基础配置:设置终端和输出文件(根据你的需求调整)
set terminal pngcairo enhanced font 'Arial,10' size 800,600
set output 'mean_ci_plot.png'

# 设置图形样式
set style data yerrorlines
set title "第13列均值与95%置信区间"
set xlabel "第9列取值"
set ylabel "第13列均值"
set grid ytics lt 0 lw 1 lc rgb '#dddddd'

# 定义置信区间计算所需的t值(10个样本,自由度9,95%置信水平的t临界值)
t_value = 2.262

# 统计第9列=0.1的样本第13列数据
stats 'your_data_file.txt' using ($9 == 0.1 ? $13 : NaN) name 'd01_'
# 统计第9列=0.2的样本第13列数据
stats 'your_data_file.txt' using ($9 == 0.2 ? $13 : NaN) name 'd02_'

# 计算置信区间上下限:均值 ± (样本标准差 / sqrt(样本数)) * t临界值
d01_lower = d01_mean - (d01_ssd / sqrt(d01_records)) * t_value
d01_upper = d01_mean + (d01_ssd / sqrt(d01_records)) * t_value
d02_lower = d02_mean - (d02_ssd / sqrt(d02_records)) * t_value
d02_upper = d02_mean + (d02_ssd / sqrt(d02_records)) * t_value

# 构造yerrorlines所需的四列数据:x, mean, lower, upper
plot '-' using 1:2:3:4 with yerrorlines lw 2 lc rgb '#2c3e50' title "均值与置信区间"
0.1  d01_mean  d01_lower  d01_upper
0.2  d02_mean  d02_lower  d02_upper
e

关键步骤解释

  1. 分组统计数据:

    • 用stats命令结合条件筛选($9 == 0.1 ? $13 : NaN),只统计第9列等于目标值的第13列数据。
    • 通过name 'd01_'参数给统计结果加上前缀,避免不同分组的统计变量冲突。统计后会生成d01_mean(均值)、d01_ssd(样本标准差)、d01_records(样本数)等变量。
  2. 计算置信区间:

    • 这里采用的是t分布置信区间(适合小样本,比如你的10个样本),公式为:
      置信区间上下限 = 均值 ± (样本标准差 / √样本数) * t临界值
    • 如果你的场景适合用正态分布近似,把t_value换成1.96(95%置信水平的正态临界值)即可。
  3. 绘制图形:

    • 用'-'构造临时数据块,把每个分组的x值、均值、置信上下限按四列格式传入。
    • yerrorlines样式会自动绘制均值点和上下误差线,完美匹配你的需求。

常见问题排查

  • 如果统计结果不对,检查数据文件的列分隔符(默认是空格/制表符,如果是逗号需要加set datafile separator ',')。
  • 确认第9列和第13列的索引是否正确(Gnuplot的列从1开始计数)。
  • 如果需要其他置信水平,调整t_value即可(比如90%置信水平下,自由度9的t值是1.833)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:03:58