automatizzare la stampa di gnuplot con bash


11

Ho 6 file che devono essere tracciati come grafici a linee con margini di errore e inviarli a diversi file png. Il formato del file è il seguente.

secondi media-media min max

Come potrei fare per tracciare automaticamente questi grafici? Quindi eseguo un file chiamato bash.sh e otterrà i 6 file e produrrà i grafici su .pngfile diversi . Sono richiesti anche titoli ed etichette degli assi.

Risposte:


14

Se ho capito bene, questo è quello che vuoi:

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

Ciò presuppone che i tuoi file siano tutti nella directory corrente. Quanto sopra è uno script bash che genererà i tuoi grafici. Personalmente, di solito scrivo un file di comando gnuplot (chiamalo, diciamo, gnuplot_in), usando uno script di qualche forma, con i comandi sopra per ogni file e lo plotto usando gnuplot < gnuplot_in.

Per darti un esempio, 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()

dov'è Your_file_glob_patternqualcosa che descrive la denominazione dei tuoi file di dati, sia esso *o *dat. Invece del globmodulo, puoi anche usarlo osovviamente. Qualunque cosa generi un elenco di nomi di file, davvero.


1
Il tuo commento nella tua risposta è una soluzione più pulita, perché non espandere la risposta per mostrare un esempio. +1
bsd

Grazie per il commento. Lo stavo facendo mentre commentavi il post.
Wojtek,

0

Soluzione Bash, utilizzando un file di comando temporaneo:

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

Questo potrebbe aiutare.

#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"

Eseguire il file di script come gnuplot filename.

Clicca qui per maggiori dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.