2016-05-06 22 views
1

Ich arbeite an einem Skript, das eine csv mit einer beliebigen Anzahl von y-Werten für einen gegebenen x-Wert generiert. Die erste Zeile des CSV enthält die Namen der Datensätze. Der x-Wert ist ein Unix-Zeitstempel. Ich möchte gnuplot verwenden, um diese Daten als ein gestapeltes Liniendiagramm darzustellen, wobei die Werte als Bruchteile eines Gesamtwerts für diese Zeile angezeigt werden. Wie würde ich das tun?GNUPlot - Beliebige Anzahl von Spalten in gestapelter Zeile

Ich habe die folgenden Lösungen betrachtet und versucht, sie zu integrieren, aber ich kann nicht herausfinden, was ich falsch mache.

Es wird entweder nicht genügend Spalten oder eine fehlende Übereinstimmung für die Anzahl der Spalten sagen.

Es gibt bis zu N Datenspalten für einen bestimmten Zeitindex. Die Summe, die ich betrachte, ist für einen bestimmten Zeitindex.

-

Ein Beispiel für meine Daten:

KEY,CSS,JavaScript,Perl,Python,Shell 
1428852630,0,0,0,0,406 
1428852721,0,0,0,0,406 
1428852793,0,0,0,0,406 
1428853776,0,0,0,0,781 
1429889154,0,0,0,0,1200 
1429891056,0,0,0,0,1648 
1429891182,0,0,0,0,1648 
1429891642,0,0,0,0,1648 
1430176065,0,0,0,0,2056 

Es könnte jedoch eine große Anzahl von Spalten sein, möchte ich ein, dass die Anzahl der Spalten auf der Laufzeit festlegt.


http://gnuplot.sourceforge.net/demo/histograms.html - Dies scheint Probleme zu haben, mit einer beliebigen Anzahl von Spalten so modifiziert werden.

plot 'immigration.dat' using (100.*$2/$24):xtic(1) t column(2), \ 
    for [i=3:23] '' using (100.*column(i)/column(24)) title column(i) 

https://newspaint.wordpress.com/2013/09/11/creating-a-filled-stack-graph-in-gnuplot/

+0

Es gibt einen Widerspruch: „Werte werden als Fraktionen von insgesamt gezeigt“ und „Ich weiß nicht, die yrange“? Der Code sieht gut aus, erklären Sie die Probleme, die Sie haben. Sind in jeder Zeile 24 Spalten vorhanden, z. ? – Joce

+0

@Joce Ich habe gerade die Informationen zu den Spalten hinzugefügt und den unbekannten Yrange entfernt. – HSchmale

+0

Was ist mit dem Hinzufügen von Nullen in den leeren Spalten? Sie können auch ein Symbol für fehlende Daten definieren, das in Ihrer Datei verwendet wird, z. 'set datafile fehlt"? "'. Sie sollten ein minimales Beispiel mit einem kleinen Datensample einfügen, um eine genaue Antwort zu erhalten. – Joce

Antwort

1

This answer zeigt, wie Spalten zu zählen, mit einer geringfügigen Änderung:

file="file.dat" 
get_number_of_cols = "awk -F, 'NR == 1 { print NF; exit }' ".file 
nc=system(get_number_of_cols) 

Dann brauchen Sie so colums Summe 2-nc, sie tut es mit einer Rekursion:

sum(c,C)=((c!=C)?column(c)+sum(c+1,C):column(c)) 

Und jetzt können Sie plotten:

set key outside 
set datafile separator "," 
plot for [i=nc:2:-1] file using 0:(100*sum(2,i)/sum(2,nc)):xtic(1) title columnhead(i) with filledcurve y=0 

enter image description here