2016-10-19 4 views
1

lassen Sie uns sagen, dass ich eine Menge von Daten des Formulars habengnuplot - schaffen boxplot für jeden so viele Zeilen

<x-value> <y-value> <standard deviation> 

Und wenn ich sage „viel“, dann meine ich, zu viel Bedeutung jedes einzelnen plotten koordinieren mit yerrorbars.

Ich möchte nun einen Boxplot für etwa alle 50 Zeilen erstellen (also eine Zeile 25 für Zeilen [1..50], eine Zeile 75 für Zeilen x = [51..100], etc .).

Was ist der schnellste Weg, dies mit gnuplot zu tun?

EDIT

Offenbar war meine Frage nicht präzise genug:

ich für x = 1..50 alle Werte nehmen wollen, so tun sie alle bei 25 passiert ist, eine boxplot erstellen. Nimm alle Werte für x = 51..100, tue so, als wären sie alle bei 75 und erstelle einen Boxplot und so weiter.

+0

@ Christoph nicht anwendbar, weil ich in einem nicht interessiert bin Summe jeglicher Art. – User1291

+0

Ich sagte, ich wollte '' boxplots'', nicht die Durchschnittswerte. I.e. nimm alle Werte für '' x = 1..50'', tu so, als wären sie alle um 25 entstanden, erstelle einen Boxplot. Nimm alle Werte für '' x = 51..100'', tue so, als wären sie alle bei 75 passiert und erstelle einen Boxplot und so weiter. – User1291

+0

Entschuldigung, ich habe die Frage falsch gelesen, ich habe dich hoffentlich im Moment, sehe meine Antwort. – Christoph

Antwort

0

Gnuplot kann Boxplots berechnen und sie nach einer gemeinsamen Zeichenfolge gruppieren. Sie könnten diese Zeichenfolge mit einer Funktion wie

level(x) = sprintf("%d", (int(x)/50)*50 + 25) 

Mit dieser Funktion jeweils 50 Werte schaffen zu einem neuen boxplot kombiniert werden:

set style data boxplot 
level(x) = sprintf("%d", (int(x)/50)*50 + 25) 
plot 'file.dat' using (1):2:(0):(level($1)) notitle 

Beachten Sie, dass ich hier Gruppe von dem x-Wert. Wenn Sie die Zeilennummer verwenden möchten, ersetzen Sie die $1 durch $0. Beachten Sie auch, dass jeder Boxplot ein eigenes Xticlabel erhält, das Sie auf diese Weise nicht vermeiden können.

Als Testfall betrachten Sie das folgende Skript (aufgrund der dynamischen Daten Generation dieses Testfall nur auf Unix-Plattformen):

set style data boxplot 
set style fill solid 0.25 noborder 
set boxwidth 0.8 
level(x) = sprintf("%d", (int(x)/50)*50 + 25) 

plot "< seq 0 299 | awk '{print $1,$1}'" using (1):2:(0):(level($1)) notitle 

enter image description here