
Eu tenho 6 arquivos que precisam ser plotados como gráficos de linha com margens de erro e enviá-los para diferentes arquivos png. O formato do arquivo é o seguinte.
segundos média-média min máx
Como eu faria para traçar esses gráficos automaticamente? Então eu executo um arquivo chamado bash.sh e ele obterá os 6 arquivos e enviará os gráficos para .png
arquivos diferentes. Títulos e rótulos de eixo também são obrigatórios.
Responder1
Se bem entendi, é isso que você quer:
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 todos os seus arquivos estejam no diretório atual. O texto acima é um script bash que irá gerar seus gráficos. Pessoalmente, eu costumo escrever um arquivo de comando gnuplot (chame-o, digamos, gnuplot_in
), usando um script de algum formato, com os comandos acima para cada arquivo e plotá-lo 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_pattern
está algo que descreve a nomenclatura dos seus arquivos de dados, seja ele *
ou *dat
. Em vez do glob
módulo, você os
também pode usar, é claro. O que quer que gere uma lista de nomes de arquivos, na verdade.
Responder2
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
Responder3
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
.