tự động hóa âm mưu gnuplot với bash


11

Tôi có 6 tệp cần được vẽ dưới dạng biểu đồ đường có lề lỗi và xuất chúng ra các tệp png khác nhau. Định dạng tập tin như sau.

giây trung bình tối đa trung bình tối đa

Làm thế nào tôi có thể đi về vẽ đồ thị tự động? Vì vậy, tôi chạy một tệp có tên bash.sh và nó sẽ nhận được 6 tệp và xuất các biểu đồ thành các .pngtệp khác nhau . Các tiêu đề và nhãn trục cũng được yêu cầu.

Câu trả lời:


14

Nếu tôi hiểu chính xác, đây là những gì bạn muốn:

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

Điều này giả định các tập tin của bạn là tất cả trong thư mục hiện tại. Trên đây là một tập lệnh bash sẽ tạo ra biểu đồ của bạn. Cá nhân, tôi thường viết một tệp lệnh gnuplot (gọi nó là, giả sử gnuplot_in), bằng cách sử dụng một tập lệnh có dạng nào đó, với các lệnh trên cho mỗi tệp và vẽ biểu đồ bằng cách sử dụng gnuplot < gnuplot_in.

Để cho bạn một ví dụ, trong 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()

nơi Your_file_glob_patternnào đó mô tả việc đặt tên cho các tệp dữ liệu của bạn, có thể là nó *hoặc *dat. Thay vì globmô-đun, tất nhiên bạn có thể sử dụng os. Bất cứ điều gì tạo ra một danh sách các tên tập tin, thực sự.


1
Nhận xét của bạn trong câu trả lời của bạn là một giải pháp sạch hơn, tại sao không mở rộng câu trả lời để hiển thị một ví dụ. +1
bsd

Cảm ơn đã bình luận. Tôi chỉ làm điều đó như bạn nhận xét về bài viết.
Wojtek

0

Giải pháp Bash, sử dụng tệp lệnh tạm thời:

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

Điều này có thể giúp.

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

Thực hiện các tập tin kịch bản như gnuplot filename.

Bấm vào đây để biết thêm chi tiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.