嗨,我正在尝试编写一个gnuplot脚本,为另一个程序生成的数据生成CDF图。
数据如下所示:
col1 col2 col3 col4 col5
ABCD11 19.8 1.13 129 2
AABC32 14.3 2.32 109 2
AACd12 19.1 0.21 103 2
我想为第2列绘制CDF。重点是col2
中的数据可能没有排序。
要编译脚本,我使用here
等在线工具我尝试的脚本是:
set output 'out.svg'
set terminal svg size 600,300 enhanced fname 'arial' fsize 10 mousing butt solid
set xlabel "X"
set ylabel "CDF"
set style line 2 lc rgb 'black' lt 1 lw 1
set xtics format "" nomirror rotate by -10 font ", 7"
set ytics nomirror
set grid ytics
set key box height .4 width -1 box right
set nokey
set title "CDF of X"
a=0
#gnuplot 4.4+ functions are now defined as:
#func(variable1,variable2...)=(statement1,statement2,...,return value)
cumulative_sum(x)=(a=a+x,a)
plot "data.txt" using 1:(cumulative_sum($2)) with linespoints lt -1
答案 0 :(得分:1)
您可以使用cumulative
平滑样式从数据中获取CDF,请参阅help smooth cumulative
:
plot "test.dat" u 2:(1) smooth cumulative w lp
答案 1 :(得分:0)
如果要使用排序值计算第二列中值的(运行)累积总和,则可以根据awk
稍微扩展您的方法。更具体地说,命令是
tail -n+2 'test.txt' | sort -k2,2n | awk '{s+=$2; print NR, s}'
此处,tail
剥离标题(跳过第一行),sort
根据第二列按数字排序,最后awk
计算累积和作为记录/项目数。