Automatisieren Sie das Gnuplot-Plotten mit Bash

11

Ich habe 6 Dateien, die als Liniendiagramme mit Fehlerrändern geplottet und in verschiedene PNG-Dateien ausgegeben werden müssen. Das Dateiformat ist wie folgt.

Sekunden Mittelwert Durchschnitt min max

Wie würde ich vorgehen, um diese Diagramme automatisch zu zeichnen? Also führe ich eine Datei namens bash.sh aus, die die 6 Dateien abruft und die Grafiken in verschiedene .pngDateien ausgibt . Titel und Achsenbeschriftungen sind ebenfalls erforderlich.

Mintuz
quelle

Antworten:

14

Wenn ich es richtig verstehe, ist es das, was Sie wollen:

for FILE in *; do
    gnuplot <<- EOF
        set xlabel "Label"
        set ylabel "Label2"
        set title "Graph title"   
        set term png
        set output "${FILE}.png"
        plot "${FILE}" using 1:2:3:4 with errorbars
EOF
done

Dies setzt voraus, dass sich alle Ihre Dateien im aktuellen Verzeichnis befinden. Das obige ist ein Bash-Skript, das Ihre Grafiken generiert. Persönlich schreibe ich normalerweise eine Gnuplot-Befehlsdatei (nennen wir sie beispielsweise gnuplot_in) mit einem Skript in irgendeiner Form mit den obigen Befehlen für jede Datei und zeichne sie mit gnuplot < gnuplot_in.

Um Ihnen ein Beispiel zu geben, in Python:

#!/usr/bin/env python3
import glob
commands=open("gnuplot_in", 'w')
print("""set xlabel "Label"
set ylabel "Label2"
set term png""", file=commands)

for datafile in glob.iglob("Your_file_glob_pattern"):
    # Here, you can tweak the output png file name.
    print('set output "{output}.png"'.format( output=datafile ), file=commands )
    print('plot "{file_name}" using 1:2:3:4 with errorbars title "Graph title"'.format( file_name = datafile ), file=commands)

commands.close()

Wo Your_file_glob_patternist etwas, das die Benennung Ihrer Datendateien beschreibt, sei es *oder *dat. Anstelle des globModuls können Sie osnatürlich auch verwenden. Was auch immer eine Liste von Dateinamen erzeugt, wirklich.

Wojtek Rzepala
quelle
1
Ihr Kommentar in Ihrer Antwort ist eine sauberere Lösung. Erweitern Sie die Antwort, um ein Beispiel zu zeigen. +1
bsd
Danke für den Kommentar. Ich habe das gerade getan, als Sie den Beitrag kommentiert haben.
Wojtek Rzepala
0

Bash-Lösung mit einer temporären Befehlsdatei:

echo > gnuplot.in 
for FILE in *; do
    echo "set xlabel \"Label\"" >> gnuplot.in
    echo "set ylabel \"Label2\"" >> gnuplot.in
    echo "set term png" >> gnuplot.in
    echo "set output \"${FILE}.png\" >> gnuplot.in
    echo "plot \"${FILE}\" using 1:2:3:4 with errorbars title \"Graph title\"" >> gnuplot.in
done
gnuplot gnuplot.in
Rubel
quelle
0

Dies könnte helfen.

#set terminal postfile       (These commented lines would be used to )
#set output  "d1_plot.ps"    (generate a postscript file.            )
set title "Energy vs. Time for Sample Data"
set xlabel "Time"
set ylabel "Energy"
plot "d1.dat" with lines
pause -1 "Hit any key to continue"

Führen Sie die Skriptdatei als aus gnuplot filename.

Klicken Sie hier für weitere Details.

Lala Khan
quelle