basn ile çizim gnuplot otomatikleştirmek


11

Hata kenar boşlukları ile çizgi grafikler olarak çizilmesi ve farklı png dosyaları çıktı gereken 6 dosya var. Dosya biçimi aşağıdaki gibidir.

saniye ortalama-ortalama min maks

Bu grafikleri otomatik olarak nasıl çizebilirim? Bu yüzden bash.sh adlı bir dosyayı çalıştırıyorum ve 6 dosyayı alıp grafikleri farklı .pngdosyalara çıktılar . Başlıklar ve eksen etiketleri de gereklidir.

Yanıtlar:


14

Doğru anlarsam, istediğiniz şey budur:

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

Bu, dosyalarınızın tümünün geçerli dizinde olduğunu varsayar. Yukarıdaki, grafiklerinizi oluşturacak bir bash betiğidir. Şahsen, genellikle bir gnuplot komut dosyası yazıyorum (diyelim ki, gnuplot_inher tür dosya için yukarıdaki komutları kullanarak, bazı formların bir komut dosyasını kullanarak) ve kullanarak çizim gnuplot < gnuplot_in.

Size bir örnek vermek gerekirse, python'da:

#!/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()

nerede Your_file_glob_patternveri dosyalarınızın isimlerini açıklayan bir şey var, *ya da *dat. globModül yerine oselbette de kullanabilirsiniz . Ne olursa olsun, dosya adlarının bir listesini oluşturur.


1
Cevabınızdaki yorumunuz daha temiz bir çözümdür, neden bir örnek göstermek için cevabı genişletmeyesiniz? +1
bsd

Yorum için teşekkürler. Sadece yazıya yorum yaparken bunu yapıyordum.
Wojtek

0

Geçici bir komut dosyası kullanarak Bash çözümü:

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

Bu yardımcı olabilir.

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

Kod dosyasını şu şekilde yürütün gnuplot filename.

Daha fazla bilgi için buraya tıklayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.