Um dies zu tun, benötigen Sie eine Art von externer Verarbeitung. Eine Möglichkeit wäre, gawk
zu verwenden, um die erforderlichen Mengen zu berechnen und diese Hilfsausgabe an Gnuplot zu übergeben, um sie zu plotten. Zum Beispiel:
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'
Dies setzt voraus, dass das Skript analyze.awk
im selben Verzeichnis befindet, aus dem Gnuplot gestartet wird (sonst wäre es notwendig, den Pfad in der -f
Option von gawk
zu ändern Das Skript analyze.awk
selbst liest.:
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);
}
Es implementiert direkt die online algorithm den Mittelwert zu berechnen und für jeden einzelnen Wert von x
druckt diese sowie die Min-/max-Werte bedeuten.
Im Gnuplot-Skript wird die interessierende Spalte an die Funktion plotCmd
übergeben, die den auszuführenden Befehl vorbereitet und dessen Ausgabe mit u 1:2:3:4 w yerrorbars
geplottet wird. Diese Syntax bedeutet, dass das Konfidenzintervall in der 3./4. Spalte gespeichert wird, während der Wert selbst (der Mittelwert) in der zweiten Spalte liegt.
Insgesamt ergeben die beiden obigen Skripte das Bild unten. Das Konfidenzintervall auf dem letzten Punkt ist nicht sichtbar, da die Beispieldaten in Ihrer Frage nur einen Datensatz für x = 40 enthalten, daher stimmen die Min/Max-Werte mit dem Mittelwert überein.
Haben Sie die erste Spalte bedeuten x, Spalten 2/3/4 sind Y1/Y2/Y3 jeweils? Sie möchten die 6 y1-Werte, die zu x = 0 gehören, mitteln? Oder willst du y1/y2/y3 mitteln? Und was ist mit dem Konfidenzintervall, sind die Werte bereits in der Datendatei oder müssen sie berechnet werden? Wenn das berechnet werden muss, wie? – maij
@maij ja, ich muss 3 Graphen zeichnen (kein Problem dafür). Für die sechs Werte (y1, d. H.) Berechne ich den Durchschnitt und ich werde ihn darstellen. Für den Vertrauensbalken fixiere ich den oberen Wert und den niedrigeren Wert für jeden Satz. – wolfgunner