
Tengo 6 archivos que deben trazarse como gráficos de líneas con márgenes de error y enviarlos a diferentes archivos png. El formato del archivo es el siguiente.
segundos media media mín máx
¿Cómo haría para trazar estos gráficos automáticamente? Entonces ejecuto un archivo llamado bash.sh y obtendrá los 6 archivos y generará los gráficos en diferentes .png
archivos. También se requieren títulos y etiquetas de ejes.
Respuesta1
Si entiendo correctamente, esto es lo que quieres:
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
Esto supone que todos sus archivos están en el directorio actual. Lo anterior es un script bash que generará sus gráficos. Personalmente, normalmente escribo un archivo de comando gnuplot (llámelo, digamos, gnuplot_in
), usando un script de algún tipo, con los comandos anteriores para cada archivo y lo trazo usando gnuplot < gnuplot_in
.
Para darte un ejemplo, en 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()
¿Dónde Your_file_glob_pattern
hay algo que describa el nombre de sus archivos de datos, ya sea *
o *dat
. En lugar del módulo, también glob
puedes utilizarlo, por supuesto. os
Lo que sea que genere una lista de nombres de archivos, de verdad.
Respuesta2
Solución Bash, usando un archivo de comando temporal:
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
Respuesta3
Esto podría ayudar.
#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"
Ejecute el archivo de script como gnuplot filename
.