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.

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.


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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.