爲此,您將需要某種外部處理。一種可能性是使用gawk
來計算所需的數量並將該輔助輸出饋送給Gnuplot以繪製它。例如:
set terminal png enhanced
set output 'test.png'
fName = 'data.dat'
plotCmd(col_num)=sprintf('< gawk -f analyze.awk -v col_num=%d %s', col_num, fName)
set format y '%0.2f'
set xr [-5:25]
plot \
plotCmd(2) u 1:2:3:4 w yerrorbars pt 3 lc rgb 'dark-red' t 'column 2'
這假定腳本analyze.awk
駐留在從中gnuplot在啓動目錄(否則,就必須修改的gawk
的-f
選擇路徑中的腳本analyze.awk
本身讀取:
function analyze(x, data){
n = 0;mean = 0;
val_min = 0;val_max = 0;
for(val in data){
n += 1;
delta = val - mean;
mean += delta/n;
val_min = (n == 1)?val:((val < val_min)?val:val_min);
val_max = (n == 1)?val:((val > val_max)?val:val_max);
}
if(n > 0){
print x, mean, val_min, val_max;
}
}
{
curr = $1;
yval = $(col_num);
if(NR==1 || prev != curr){
analyze(prev, data);
delete data;
prev = curr;
}
data[yval] = 1;
}
END{
analyze(curr, data);
}
它直接實現online algorithm計算平均和的x
打印每個不同的值意思以及最小/最大值。
在Gnuplot腳本中,感興趣的列然後被傳遞給plotCmd
函數,該函數準備要執行的命令並且其輸出將被繪製爲u 1:2:3:4 w yerrorbars
。此語法表示置信區間存儲在第3 /第4列中,而值本身(均值)存在於第2列中。
總而言之,上面的兩個腳本生成下面的圖片。由於您問題中的示例數據僅包含x = 40的一條記錄,因此最後一點的置信區間不可見,因此最小/最大值與平均值一致。
是Y1/Y2/Y3,分別爲2/3/4你的意思是第一列是X,列?你想平均屬於x = 0的6個y1值?或者你想平均y1/y2/y3?那麼置信區間呢,數據文件中已經存在的值還是必須計算?如果必須計算,如何? – maij
@maij是的,我必須繪製3個圖表(沒有問題)。對於六個值(即y1),我計算平均值,我將表示它,對於置信欄,我確定每組的上限值和下限值。 – wolfgunner