gnuplot 可以从原始数据文件创建箱线图吗?我知道如何从已经计算的中位数、四分位数等中绘制箱线图-但是如何从原始数据文件中绘制?
在原始数据文件的每一行中都有一个测试结果。
我自己刚遇到这个,在 gnuplot 4.5(目前是 cvs 开发版本)中它具有此功能。
目前这意味着您必须自己从源代码http://gnuplot.sourceforge.net/development/index.html#DownloadCVS编译 gnuplot 。
完成后,这里有一个演示文件: http: //gnuplot.sourceforge.net/demo_4.5/boxplot.html
我认为您最终必须使用外部程序来计算箱线图的必要数据。我用过awk,但是任何程序都可以在这个地方使用。请注意,我已经计算了每行原始数据中的开盘/收盘/最小值/最大值,而不是平均值和分位数。
set xrange [-1:9]
plot "< awk '{sum=0; opening=$1; closing=$NF; min=$1; max=$1; \
for (i=1; i<=NF; i++) {sum=sum+$i; if ($i<min) min=$i; if ($i>max) max=$i}; \
print sum/NF, opening, closing, min, max}' \
junk.dat" us 0:2:4:5:3 w candle notitle
在junk.dat
文件中包含以下数据:
5.532 5.040 4.962 19.314 5.136
10.004 4.592 5.836 6.999 7.823
8.887 6.335 5.545 5.056 6.216
4.341 4.552 4.512 4.009 5.811
4.724 4.869 5.016 2.593 5.662
4.555 5.472 4.866 5.559 -0.608
6.974 3.838 2.953 6.630 2.753
5.571 8.112 3.261 7.029 4.375
3.497 5.200 6.555 5.311 8.204
这是您将获得的情节:
如果我正确理解您的问题并且您正在寻找一种计算平均值的方法,您可以执行以下操作:
calc_mean(x1,x2,x3) = (x1+x2+x3)/3
calc_sum(x1,x2,x3) = x1+x2+x3
get_min(x1,x2,x3) = x1 < x2 ? (x1 < x3 ? x1 : (x2 < x3 ? x2 : x3)) : (x2 < x3 ? x2 : x3)
get_max(x1,x2,x3) = x1 > x2 ? (x1 > x3 ? x1 : (x2 > x3 ? x2 : x3)) : (x2 > x3 ? x2 : x3)
plot "Data.csv" u 0:(calc_mean($1, $2, $3)) t "Mean" w l, \
"" u 0:(calc_sum($1, $2, $3)) t "Sum" w l, \
"" u 0:(get_min($1, $2, $3)) t "Min" w l, \
"" u 0:(get_max($1, $2, $3)) t "Max" w l
上面的脚本计算数据行的平均值、总和、最小值和最大值。using 指令中的0
只是将数据行的索引作为 x 坐标值。
具有以下内容Data.csv
:
0.62614 0.50293 0.62078
0.63789 0.58924 0.71288
0.16297 0.77453 0.82417
0.20703 0.22424 0.33596
0.57829 0.96545 0.60737
您将得到以下情节:
我希望这就是你要找的。