我有一个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中是否可行?如果是,怎么办?如果没有,关于我的问题,您还有其他建议吗?
答案 0 :(得分:1)
这里是经过完全修订和更通用的版本。
由于要按3列进行过滤,因此需要具有3个属性来区分图中的数据。例如,这将是颜色,x位置和点类型。该脚本的基本作用是:
$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
...
变量ColX
,ColC
,ColP
和ColS
定义用于x位置,颜色,点类型和统计信息的列。
查找ColX
,ColC
,ColP
,(检查help smooth frequency
)的唯一值并将其放入数据块$ColX
,{{1 }}和$ColC
。
将唯一值放入数组$ColP
,ArrX
,ArrC
循环所有可能的组合,并对ArrP
进行统计,然后将其放入ColS
。在颜色,x位置和点类型的开头添加三列。
$Data2
看起来像这样:
$Data2
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 yerror
和with vectors
。第三个with points
只是在图例中留空行,第四个是将点类型添加到图例中。我希望您能弄清所有其他细节,并使其适应您的数据。
代码:
keyentry
结果:
答案 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
这将根据第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