mengotomatiskan gnuplot merencanakan dengan bash

11

Saya memiliki 6 file yang perlu diplot sebagai grafik garis dengan margin kesalahan dan output ke file png yang berbeda. Format file adalah sebagai berikut.

detik rata-rata minimum maks

Bagaimana cara merencanakan grafik ini secara otomatis? Jadi saya menjalankan file bernama bash.sh dan itu akan mendapatkan 6 file dan output grafik ke .pngfile yang berbeda . Label judul dan sumbu juga diperlukan.

Mintuz
sumber

Jawaban:

14

Jika saya mengerti dengan benar, inilah yang Anda inginkan:

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

Ini mengasumsikan file Anda semua ada di direktori saat ini. Di atas adalah skrip bash yang akan menghasilkan grafik Anda. Secara pribadi, saya biasanya menulis file perintah gnuplot (sebut saja, katakan, gnuplot_in), menggunakan skrip dalam beberapa bentuk, dengan perintah di atas untuk setiap file dan plot menggunakannya gnuplot < gnuplot_in.

Sebagai contoh, dengan 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()

di mana Your_file_glob_patternada sesuatu yang menggambarkan penamaan file data Anda, baik itu *atau *dat. Alih-alih globmodul, Anda dapat menggunakan osjuga tentu saja. Apa pun yang menghasilkan daftar nama file, sungguh.

Wojtek
sumber
1
Komentar Anda dalam jawaban Anda adalah solusi yang lebih bersih, mengapa tidak memperluas jawaban untuk menunjukkan contoh. +1
bsd
Terima kasih atas komentarnya. Saya hanya melakukan itu ketika Anda mengomentari pos.
Wojtek
0

Solusi Bash, menggunakan file perintah sementara:

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
sumber
0

Ini mungkin bisa membantu.

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

Jalankan file skrip sebagai gnuplot filename.

Klik di sini untuk perincian lebih lanjut.

lala khan
sumber