用平均和标准偏差(GNUPlot)绘制选定的行

时间:2019-11-25 23:30:39

标签: select row gnuplot average standard-deviation

我有一个csv文件,其实验结果如下:

64  4   8   1   1   2   1   ttt 62391   4055430 333 0.0001  10  161 108 288 0
64  4   8   1   1   2   1   ttt 60966   3962810 322 0.0001  10  164 112 295 0
64  4   8   1   1   2   1   ttt 61530   3999475 325 0.0001  10  162 112 291 0
64  4   8   1   1   2   1   ttt 61430   4054428 332 0.0001  10  158 110 286 0
64  4   8   1   1   2   1   ttt 63891   4152938 339 0.0001  9   149 109 274 0
64  4   32  1   1   2   1   ttt 63699   4204182 345 0.0001  4   43  179 240 0
64  4   32  1   1   2   1   ttt 63326   4116218 336 0.0001  4   45  183 248 0
64  4   32  1   1   2   1   ttt 62654   4135211 340 0.0001  4   48  178 248 0
64  4   32  1   1   2   1   ttt 63192   4107506 339 0.0001  4   49  175 245 0
64  4   32  1   1   2   1   ttt 62707   4138666 345 0.0001  4   46  179 245 0
64  4   64  1   1   2   1   ttt 60968   3962929 323 0.0001  4   46  191 256 0
64  4   64  1   1   2   1   ttt 58765   3819787 305 0.0001  4   50  196 267 0
64  4   64  1   1   2   1   ttt 58946   3831499 308 0.0001  5   52  187 260 0
64  4   64  1   1   2   1   ttt 60646   3942047 321 0.0001  4   47  187 254 0
64  4   64  1   1   2   1   ttt 59723   3882044 311 0.0001  4   46  201 269 0
64  8   8   1   1   2   1   ttt 63414   4185382 382 0.0001  33  517 109 643 0
64  8   8   1   1   2   1   ttt 62429   4057899 372 0.0001  33  538 110 667 0
64  8   8   1   1   2   1   ttt 60622   3940452 384 0.0001  33  556 115 689 0
64  8   8   1   1   2   1   ttt 64433   4188192 369 0.0001  33  519 110 644 0

我的目标是能够绘制“ ttt”之前各列的各种组合(在不同图表中选择),并在“ ttt”之后绘制各列的平均和标准偏差(选择哪一组)(通过分组)在“ ttt”列之前)。

在GNUPlot中是否可行?如果是,怎么办?如果没有,关于我的问题,您还有其他建议吗?

2 个答案:

答案 0 :(得分:1)

这里是经过完全修订和更通用的版本。

由于要按3列进行过滤,因此需要具有3个属性来区分图中的数据。例如,这将是颜色,x位置和点类型。该脚本的基本作用是:

  1. 生成随机数据进行测试(取而代之的是文件)

$Data看起来像这样:

  8  64  57773  0
  4  32  64721  2
  8  32  56757  1
  4  16  56226  2
  8   8  56055  1
  8  64  59874  0
  8  32  58733  0
  4  16  55525  2
  8  32  58869  0
  8  64  64470  0
  4  32  60930  1
  8  64  57073  2
  ...
  1. 变量ColXColCColPColS定义用于x位置,颜色,点类型和统计信息的列。

  2. p>
  3. 查找ColXColCColP,(检查help smooth frequency)的唯一值并将其放入数据块$ColX,{{1 }}和$ColC

  4. 将唯一值放入数组$ColPArrXArrC

  5. 循环所有可能的组合,并对ArrP进行统计,然后将其放入ColS。在颜色,x位置和点类型的开头添加三列。

$Data2看起来像这样:

$Data2
  1. 最后,绘制数据。我不知道绘图样式 1 1 1 0 8 4 61639.4 2788.4 1 1 2 0 8 8 59282.1 2740.2 1 2 1 0 16 4 59372.3 2808.6 1 2 2 0 16 8 60502.3 2825.0 1 3 1 0 32 4 59850.7 2603.8 1 3 2 0 32 8 60617.7 1979.8 1 4 1 0 64 4 60399.4 3273.6 1 4 2 0 64 8 59930.7 2919.8 2 1 1 1 8 4 59172.6 2288.2 2 1 2 1 8 8 58992.2 2888.0 2 2 1 1 16 4 59350.1 2364.6 2 2 2 1 16 8 61034.0 2368.5 2 3 1 1 32 4 59920.8 2867.6 2 3 2 1 32 8 59711.9 3464.2 2 4 1 1 64 4 60936.7 3439.7 2 4 2 1 64 8 61078.7 2349.3 3 1 1 2 8 4 58976.0 2376.3 3 1 2 2 8 8 61731.5 1635.7 3 2 1 2 16 4 58276.0 2101.7 3 2 2 2 16 8 58594.5 3358.5 3 3 1 2 32 4 60471.5 3737.6 3 3 2 2 32 8 59909.1 2024.0 3 4 1 2 64 4 62044.2 1446.7 3 4 2 2 64 8 60454.0 3215.1 与可变点类型一起如何正常工作。因此,我将其分为两个绘图命令with yerrorwith vectors。第三个with points只是在图例中留空行,第四个是将点类型添加到图例中。

我希望您能弄清所有其他细节,并使其适应您的数据。

代码:

keyentry

结果:

enter image description here

答案 1 :(得分:0)

我不认为gnuplot可以在单个plot命令中完全满足您的要求。我将向您展示两种选择,希望一个或两个都是有用的起点。

替代1:标准箱线图

spacing = 1.0
width = 0.25
unset key
set xlabel "Column 3"
set ylabel "Column 9"
plot 'data' using (spacing):9:(width):3 with boxplot lw 2

enter image description here

这将根据第3列中的值收集点,并为每个此类值生成一个箱形图。这是一种广泛使用的方法来显示类别中点值的分布,但这是四分位数分析,而不是平均值+标准差的显示。

替代方法2:计算预先已知类别的均值和标准差

箱线图分析的优点是,您无需预先知道第3列中可能出现的值。Gnuplot 可以根据第3列的值计算平均值和标准差,但是您可以需要预先指定该值是什么。这是针对您提供的特定示例文件的一组命令。它计算但不绘制所需的分类平均值和标准偏差。您可以使用这些数字来构建图,但这将需要其他命令。例如,您可以将每个类别的值保存在新文件,数组或数据块中,然后返回并一起绘制。

col3entry = "8 32 64"
do for [i in col3entry] {
    stats "data" using ($3 == real(i) ? $9 : NaN) name "Condition".i nooutput
    print  i, ": ", value("Condition".i."_mean"), value("Condition".i."_stddev")

}

输出:

8: 62345.1111111111 1259.34784220021
32: 63115.6 392.552977316438
64: 59809.6 881.583711283279
相关问题