Automatisieren Sie das Gnuplot-Plotten mit Bash

Automatisieren Sie das Gnuplot-Plotten mit Bash

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

Sekunden Mittelwert Min. Max.

Wie kann ich diese Diagramme automatisch zeichnen? Ich führe also eine Datei namens bash.sh aus. Sie ruft die 6 Dateien ab und gibt die Diagramme in verschiedene .pngDateien aus. Titel und Achsenbeschriftungen sind ebenfalls erforderlich.

Antwort1

Wenn ich das 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. Oben ist ein Bash-Skript, das Ihre Diagramme generiert. Persönlich schreibe ich normalerweise eine Gnuplot-Befehlsdatei (nennen Sie sie beispielsweise gnuplot_in), indem ich ein Skript irgendeiner Art mit den obigen Befehlen für jede Datei verwende und sie mit zeichne gnuplot < gnuplot_in.

Um Ihnen ein Beispiel in Python zu geben:

#!/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()

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

Antwort2

Bash-Lösung unter Verwendung 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

Antwort3

Das 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.

verwandte Informationen