автоматизувати графік gnuplot за допомогою bash


11

У мене є 6 файлів, які потрібно накреслити як лінійні графіки з полями помилок та вивести їх у різні файли png. Формат файлу такий.

середня секунда середня хв. макс

Як би я пішов про побудову цих графіків автоматично? Тому я запускаю файл під назвою bash.sh, і він отримає 6 файлів і виведе графіки в різні .pngфайли. Назви та мітки осі також необхідні.

Відповіді:


14

Якщо я правильно розумію, це те, що ви хочете:

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

Це передбачає, що ваші файли знаходяться в поточному каталозі. Наведене вище - сценарій bash, який генерує ваші графіки. Особисто я зазвичай записую командний файл gnuplot (називаємо його, скажімо, gnuplot_in), використовуючи сценарій якоїсь форми, з вищезазначеними командами для кожного файлу та будую його за допомогою gnuplot < gnuplot_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()

де Your_file_glob_patternщось описує найменування ваших файлів даних, будь то *чи *dat. Замість globмодуля ви можете використовувати os, звичайно. Що б не створив список імен файлів, насправді.


1
Ваш коментар у вашій відповіді є більш чистим рішенням, чому б не розширити відповідь, щоб показати приклад. +1
bsd

Дякуємо за коментар Я саме робив це, коли ви коментували публікацію.
Войтек

0

Рішення Bash, використовуючи тимчасовий командний файл:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.