zautomatyzuj drukowanie gnuplot za pomocą bash


11

Mam 6 plików, które należy wykreślić jako wykresy liniowe z marginesami błędów i wyprowadzić je do różnych plików png. Format pliku jest następujący.

sekund średnia średnia min

Jak miałbym przejść do automatycznego drukowania tych wykresów? Więc uruchamiam plik o nazwie bash.sh, który pobierze 6 plików i wyśle ​​wykresy do różnych .pngplików. Wymagane są również tytuły i etykiety osi.

Odpowiedzi:


14

Jeśli dobrze rozumiem, właśnie tego chcesz:

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

Zakłada się, że wszystkie pliki znajdują się w bieżącym katalogu. Powyżej jest skrypt bash, który wygeneruje twoje wykresy. Osobiście zwykle piszę plik poleceń gnuplot (nazywaj to, powiedzmy gnuplot_in), używając skryptu jakiejkolwiek formy, z powyższymi poleceniami dla każdego pliku i kreślę go za pomocą gnuplot < gnuplot_in.

Aby podać przykład, w 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()

gdzie Your_file_glob_patternjest coś, co opisuje nazywanie twoich plików danych, *czy to lub *dat. Zamiast globmodułu możesz osoczywiście również użyć . Cokolwiek generuje listę nazw plików, naprawdę.


1
Twój komentarz w odpowiedzi jest czystszym rozwiązaniem, więc dlaczego nie rozwinąć odpowiedzi, aby pokazać przykład. +1
bsd,

Dziękuję za komentarz. Właśnie to robiłem, kiedy skomentowałeś post.
Wojtek

0

Rozwiązanie Bash, używając tymczasowego pliku poleceń:

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

To może pomóc.

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

Uruchom plik skryptu jako gnuplot filename.

Kliknij tutaj po więcej szczegółów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.