2016-04-24 9 views
2

Ich bin neu in gnuplot. Ich habe csv-Datei wie folgt:Gnuplot - Zeichnen von CSV-Datei basierend auf Wert auf Zeile

category| date  | value 
a  |2016-04-01 | 0,2 
a  |2016-04-02 | 0,31 
a  |2016-04-03 | 0,14 
.... 
a  |2016-04-11 | 0,4 
b  |2016-04-01 | 0,32 
b  |2016-04-02 | 0,31 
.... 
b  |2016-04-10 | 0,15 
C  |2016-04-01 | 0,15 
C  |2016-04-02 | 0,23 
..... 

And so on 

Wie plotten I-Daten für jede Kategorie auf verschiedenen Graphen in einem Befehl?

Zum Beispiel, wenn ich 9 verschiedene Kategorien habe, dann habe ich 9 Graphen, wo X-Achse ist für Datum, und Y-Achse ist für Wert.

+0

Warum ist der R-Tag da? – hrbrmstr

+0

Dies ist keine CSV-Datei. csv ist die Abkürzung für "Comma Separated Values". Und wenn Sie Einfluss auf das Format haben: Schalten Sie das Dezimaltrennzeichen auf ".", Und trennen Sie die Spalten durch Leerzeichen oder Tab. – Karl

Antwort

0

Ich benutzte Perl, um den Eingang für Gnuplot neu zu formatieren.

#! /bin/bash 
input=$1 
tmp=$(mktemp) 
perl -aF'/\|/' \ 
    -ne 'print "\n\n" if $last ne $F[0] && $. > 2; 
     $last = $F[0]; 
     $F[-1] =~ s/,/./; 
     print "@F" if $. > 1; 
     ' "$input" > "$tmp" 

categories=($(cut -f1 -d\| "$input" | uniq)) 

{ 
    cat <<EOF 
    set term png; 
    set xdata time; 
    set timefmt '%Y-%m-%d'; 
    plot '$tmp' index 0 using 2:3 with lines title "${categories[1]}" \\ 
EOF 

    i=1 
    while ((i < ${#categories[@]}-1)) ; do 
     printf ', "" index %d using 2:3 with lines title "%s"' $i "${categories[++i]}" 
    done 
} | gnuplot > "$input".png 

rm "$tmp" 
1

können Sie zeichnen Sie die Datei mehrmals mit plot s for-Schleife. Jedes Mal, wenn Sie sehen nur die x-Werte, wo Spalte man die Schleifenvariable passt (überprüfen help ternary operator):

set decimalsign "," 
set xdata time 
set format x "%Y-%M-%D" 
plot for [cat in "a b c d"] datafile using ($1 eq cat ? $2 : NaN):3 

Gnuplot kann die Punkte nicht verbinden (z with linespoints), wenn es ungültige Punkte dazwischen. Also müssen Sie die Datei vorher sortieren.