automatize a plotagem do gnuplot com o bash


11

Eu tenho 6 arquivos que precisam ser plotados como gráficos de linha com margens de erro e gerados em diferentes arquivos png. O formato do arquivo é o seguinte.

segundos média-média min max

Como eu traçaria esses gráficos automaticamente? Então, eu executo um arquivo chamado bash.sh e ele obtém os 6 arquivos e exibe os gráficos em .pngarquivos diferentes . Títulos e rótulos de eixo também são necessários.

Respostas:


14

Se bem entendi, é isso que você deseja:

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

Isso pressupõe que seus arquivos estão todos no diretório atual. O acima é um script bash que irá gerar seus gráficos. Pessoalmente, normalmente escrevo um arquivo de comando gnuplot (chame, digamos gnuplot_in), usando um script de alguma forma, com os comandos acima para cada arquivo e plote-o usando gnuplot < gnuplot_in.

Para dar um exemplo, em 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()

Onde Your_file_glob_patternestá algo que descreve a nomeação de seus arquivos de dados, seja *ou *dat. Em vez do globmódulo, você também pode usá-lo, é osclaro. O que quer que seja que gera uma lista de nomes de arquivos, na verdade.


1
O seu comentário na sua resposta é uma solução mais limpa. Por que não expandir a resposta para mostrar um exemplo? 1
bsd

Obrigado pelo comentário. Eu estava fazendo isso como você comentou no post.
Wojtek

0

Solução Bash, usando um arquivo de comando temporário:

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

Isso pode ajudar.

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

Execute o arquivo de script como gnuplot filename.

Clique aqui para mais detalhes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.