Ploteo de funciones y datos con gnuplot

Aqui intentare hacer una introduccion al uso de gnuplot. Gnuplot es un programa de ploteado, se pueden dibujar funciones de una variable, curvas, superficies y hasta datos dispuestos en columnas. Tratare de dar una breve reseña sobre su instsalacion y algunos ejemplos.
Empecemos con la instalacion en FreeBSD:
cd /usr/ports/math/gnuplot
make install clean
Ahora unos ejemplos, empecemos dibujando funciones simples, por ejemplo y=x^2. En un shell escribimos gnuplot y se nos abrira el prompt de gnuplot. Si escribimos
plot x**2
y presionamos enter, se nos tiene que abrir una ventana con una imagen parecida a esta
Y ya que andamos con las parabolicas dibujemos un cilindro parabolico, pero esta vez con un sampleo un poco mayor para mejorar la calidad de la imagen, los comandos serian esos:
set sample 500
splot x**2
Comentarios: 1- el sampleo con 500 queda bastante bien y no consume muchos recursos de la computadora, pero se puede poner el valor que mas les convenga. 2- el comando splot es para dibujar superficies. Una vez introducidos estos comandos debe aparecer algo asi
En el proximo ejemplo usaremos funciones predefinidas y usaremos de salida un archivo png, pero antes debemos ver si nuestro gnuplot tiene soporte para terminal png, lo hacmeos con el comando help terminal png. Si la respuesta es afirmativa podemos escribir la siguiente lista de comandos:
set sample 500
set terminal png small
set output "archivo.png"
Con estos comandos definimos el sampleo, el tipo de terminal y el archivo de salida. La funcion que vamos a graficar es un campo escalar, f(x,y)=(|x*y|)^1/2, este campo escalar admite derivadas parciales en el orgien, pero no es diferenciable en ese punto. La funcion modulo en gnuplot es abs() y la funcion raiz cuadrada es sqrt() asi que el comando para plotear la funcion seria:
splot sqrt(abs(x*y))
El dibujo debemos ir a buscarlo al erchivo que seteamos en set output "archivo.png" y quedaria algo asi
En este ejemplo introduciremos una funcionalidad para graficos de superficies que las deja mas lindas, ploteemos un paraboloide hiperbolico:
set sample 500
set pm3d
splot x**2-y**2
deberia quedarnos este grafico
Bueno, ahora empezaremos a graficar datos que podemos sacar por ejemplo la carga de un servidor cada un minuto, supongamos que tenemos un archivo con los siguientes datos:
0        0.4
1        0.3
2        0.5
3        1
4        2
5        1.5
6        1
7        0.8
supongamos ademas que el archivo se llama carga.log, si en el prompt del gnuplot escribimos esto:
plot "carga.log" w lines
tendremos este grafico
Si lo que necesitamos es un diagrama con cajas, impulsos o puntos con los siguientes comandos lo logramos
plot "carga.log" w impulses
plot "carga.log" w boxes
plot "carga.log" w points
Y si tenemos mas archivos de datos podemos mostrarlos en el mismo grafico, ej: ademas del archivo anterior tenemos uno con estos datos
0       1
1       1.2
2       0.9
3       0.8
4       0.7
5       1
6       1.3
7       1.4
con plot "archivo1" w lines, "archivo2" w lines graficamos los dos archivos y quedaria asi
Tambien podemos tener un archivo con tres columnas con graficarlas en 3d. Para esto les doy una ayuda y dejo que lo investiguen:
splot "archivo" using 1:2:3 w lines
Otra cosa interesante es que se se pueden hacer scripts. En un archivo de texto se escriben todos los comandos necesarios para graficar lo que queremos y despues se lo invoca con load "archivo" o desde un shell con
gnuplot < archivo
Gnuplot es una herramienta muy potente y seria muy largo hacer un tutorial con todas sus funcionalidades asi que solo me queda explicarles como es la ayuda para que cuando tengan una duda sepan usarla. La ayuda se invoca con el comando help seguido del tema que queremos conseguir ayuda, por ejemplo si queremos ver las variables que se pueden setear con set debemos escribir el comando: help set. Si queremos ver como se setea el rango del eje x el comando seria help set xrange, si queremos ver que tipos de terminales tenemos disponibles help terminal o help set terminal. En proximos articulos les mostrare algunas utilidades para las que se puede usar este programa. Yo lo uso para muchas cosas, pero creo que la mas usada es para graficar en tiempo real la carga, conexiones, memoria, etc. de mis servidores. Ya les ire mostrando scripts para hacer estas cosas.

Comentarios