วางแผน 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

นี่ถือว่าไฟล์ของคุณอยู่ในไดเรกทอรีปัจจุบัน ด้านบนเป็นสคริปต์ทุบตีที่จะสร้างกราฟของคุณ ส่วนตัวผมมักจะเขียนไฟล์คำสั่ง gnuplot (เรียกว่าพูดgnuplot_in), gnuplot < gnuplot_inการใช้สคริปต์ของรูปแบบบางส่วนที่มีคำสั่งดังกล่าวสำหรับแต่ละไฟล์และพล็อตโดยใช้

ในการให้ตัวอย่างกับคุณในภาษาไพ ธ อน:

#!/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เป็นสิ่งที่อธิบายถึงการตั้งชื่อของ datafiles ของคุณไม่ว่าจะเป็นหรือ* *datแทนที่จะเป็นglobโมดูลคุณสามารถใช้osเช่นกัน อะไรก็ตามที่สร้างรายชื่อไฟล์จริงๆ


1
ความคิดเห็นของคุณในคำตอบเป็นโซลูชันที่สะอาดกว่าทำไมไม่ขยายคำตอบเพื่อแสดงตัวอย่าง +1
bsd

ขอบคุณสำหรับความคิดเห็น ฉันแค่ทำอย่างนั้นในขณะที่คุณแสดงความคิดเห็นในโพสต์
Wojtek

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

0

สิ่งนี้อาจช่วยได้

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

gnuplot filenameรันไฟล์สคริปต์เป็น

คลิกที่นี่เพื่อดูรายละเอียดเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.