gnuplot Para ejecutar el ambiente de gnuplot, teclear desde la terminal gnuplot El comando más simple y usado en gnuplot es «plot» Cualquier comando, subcomando u opción puede ser abreviada a la forma más corta que no sea ambigua. plot "precios" using 1:2 with lines, "precios" using 1:3 with linespoints plot "precios" u 1:2 w l, "precios" u 1:3 w lp plot "precios" u 1:2 w l, "" u 1:3 w lp plot sin(x) # se gráfica la función seno El comando para guardar y cargar comandos son respectivamente los que aparecen en los siguientes ejemplos: se pueden agregar más funciones para graficar junto a la función seno, estas se van separando con comas plot sin(x), x, x-(x**3)/6 save "graph.gp" load "graph.gp" El rango es dado empleando corchetes inmediatamente después del comando plot El primer par de corchetes define el rango de valores para x; el segundo restringe el rango de los valores de y mostrados. Los archivos de comandos son archivos de texto planos, conteniendo generalmente un comando por línea. Varios comandos pueden ser combinados en una sola línea separándolos con punto y coma (;). El símbolo de número es interpretado como el inicio de un comentario. plot [][-2:2] sin(x), x, x-(x**3)/6 Exportando gráficas Para graficar datos desde un archivos encerrarlo entre comillas dobles. Para cualquier gráfica que se quiera generar, se necesita indicar dos cosas: el formato de la gráfica (GIF, JPG, PNG, etc) y el dispositivo de salida, ya sea un archivo o la pantalla. En gnuplot, se hace mediante el comando «set»: plot "precios" Si se quieren seleccionar las columnas que serán usadas como valores de x e y se deberá usar la directiva «using» con el comando plot. plot "precios" using 1:2 set terminal png # escoger el formato de la gráfica set output "migrafica.png" # escoger el dispositivo de salida Si se quiere graficar el precio de los bienes XYZ en la misma gráfica hacer plot "precios" using 1:2, "precios" using 1:3 Para indicarle a gnuplot que estilo usar para los datos, hacerlo con la directiva «with». plot "precios" using 1:2 with lines, "precios" using 1:3 with linespoints Gnuplot automáticamente proporciona un título, el cual muestra un ejemplo de la línea o el tipo de símbolo usado para cada conjunto de datos junto con una descripción de texto, pero la descripción por defecto no es muy clara en estos casos. Se puede indicar el texto que se quiera para un conjunto de datos como parte de la gráfica con la directiva «title»: El flujo completo para generar un archivo PNG con gnuplot sería: plot exp(-x**2) set terminal png set output "graph.png" replot set terminal x11 set output # # # # # # # # algún comando para graficar seleccionar el formato del archivo indicar el nombre del archivo repetir el último comando de graficación con la salida yendo al archivo indicado. restaurar la configuración a la terminal mandar la salida a la pantalla nuevamente empleando un archivo vacío Conjuntos múltiples de datos por archivo: «index» Una línea en blanco indica una discontinuidad en los datos. Los datos encima y debajo de la línea en blanco serán tratados como pertenecientes al mismo conjunto. plot "precios" using 1:2 with lines title "PQR", \ "precios" using 1:3 title "XYZ" with linespoints ¿Cómo se correlaciona el precio de PQR con XYZ? Dos líneas en son usadas para distinguir conjuntos de datos en el archivo. Cada conjunto puede ser direccionado por el comando plot como si este estuviera separado en un archivo, usando la directiva «index» con plot. plot "precios" using 2:3 with points La directiva index se pone enseguida del nombre del archivo en la sintaxis de plot y se le pone al menos un argumento numérico indicando cual conjunto del archivo se selecciona. El primer conjunto es identificado con el cero. 1 gnuplot Para graficar solamente la función de correlación para t=1000 (es el segundo conjunto de datos). «csplines» Aplica una transformación única, entonces calcula splines cúbicas naturales al resultado y las grafica. La curva resultante pasa exactamente a través de todos los puntos de datos. Como opuesto a la curva de Bézier, la cual esta definida para el conjunto entero de datos, splines están definidas localmente (entre dos puntos de datos consecutivos) y unidos suavemente en los puntos. Esta es aplicable para datos que ya están muy suaves. plot "data" index 1 using 1:2 w linespoints La directiva index puede emplear hasta tres argumentos separados por dos puntos (:) index {ent:inicio}[:{ent:final}][:{ent:incr}] «acsplines» Aplica la transformación única al conjunto de datos, entonces forma una aproximación de splines cúbicas pesadas. El peso es tomado de un tercer argumento obligatorio. Registros dispersos en líneas múltiples: «every» En data2 cada registro para un determinado tiempo se encuentra en dos líneas la primera línea da la temperatura y el segundo la presión. Si se quiere grafica sólo la temperatura contra el tiempo, se emplea la directiva «every» para escoger los registros del subconjunto de líneas: plot "precios" using 1:2 with linespoints,\ "" using 1:2 title "bezier" smooth bezier,\ "" using 1:2 title "csplines" smooth csplines Matemáticas en gnuplot Expresiones matemáticas plot "data2" every 2 using 1:2 with lines Empleando la directiva every, se puede controlar como se avanza a través de líneas. every {ent:incr}[::{ent:inicio}[::{ent:final}]] El primer argumento es el incremento, seguido (opcionalmente) por la primera y la última línea. Los números de línea se cuentan a partir de cero. Gnuplot proporciona la directiva «smooth» al comando plot como una herramienta simple para graficar archivos de datos con ruido o desordenados. La directiva smooth toma un parámetro adicional, el cual deberá ser uno de los siguientes: unique, frequency, bezier, sbezier, csplines, acsplines La directiva «unique» ordena los valores dados por la sentencia using para el eje «x». Si algún valor de x se repite, este será reemplazado con un solo dato teniendo el promedio de todos los valores «y» correspondientes. plot "desordenado" u 1:2 smooth unique with linespoints El segundo uso para unique es para manejar datos desordenados en archivos. plot [1989:1994][25:34] "descuidado" using 1:2 smooth uniq with linesp,\ "" using 1:2 with points Suavizando datos con ruido «bezier» Calcula y grafica una aproximación de Bézier de orden n, donde n es el número de puntos de datos. La curva está garantizada para que pase a través del primer dato y el último, pero en general no pasará a través de alguno de los puntos internos. La curva resultante usualmente aparece particularmente suave. «sbezier» Primero aplica la transformación única a los datos, y entonces calcula y grafica una aproximación de Bézier a los resultados. Para consultar los operadores disponibles revisar la ayuda help operators unary help operators binary help operators ternary Para conocer la funciones disponibles revisar la ayuda help functions El usuario puede definir variables y funciones e = 2.71828182845905 # La base de los logaritmos naturales sqrt2 = sqrt(2) # la raíz cuadrada de dos euler = 0.57721566490153 # La constante de Euler-Mascheroni Ejemplos de funciones definidas por el usuario functions f(x) = -x * log(x) gauss( x, m, s ) = exp( -0.5*( (x-m)/s )**2 )/sqrt(2*pi*s**2) # Usando el operador factorial para generar los coeficientes binomiales binom( n, k ) = n!/(k!*(n-k)!) min( a, b ) = ( a < b ) ? a : b # Usando el operador ternario «?» step( x ) = ( x < 0 ) ? 0 : 1 # Un pedazo de función plot sin(x), f(x) Por defecto, gnuplot supone que la variable independiente, la cual es automáticamente reemplazada por un rango de valores de x cuando se grafica la función está etiquetada por x, pero puede ser cambiada usando el comando «set dummy». Por ejemplo, set dummy t hará que t sea la variable independiente. Todas las otras variables que estén en la definición de una función, deberán tener valores asignados antes de que se pueda graficar la función. g(x) = cos(a*x)/a plot a=1, g(x), a=2, g(x) 2 gnuplot Todas las funciones y variables tienen alcance global. Los números complejos son pares de números, las conocidas parte real e imaginaria. En gnuplot, un número complejo es indicado mediante llaves ({}). El número complejo z = 1 + i es representado por la expresión Otra forma de seleccionar una columna es usando la función column(x) plot "data" using 1:($2 + 1.5*column(-2)) with lines Graficando funciones y datos z = { 1, 1 } Muchas de las funciones matemáticas internas, tales como sin(x), exp(x), y otras, pueden aceptar argumentos complejos y regresar números complejos como resultados. Las funciones especiales real(x) e imag(x) toman la parte real e imaginaria del número complejo x, respectivamente. Una limitante importante de los números complejos en gnuplot es que ambas partes deberán ser constantes numéricas, no variables, ni expresiones. El siguiente comando graficará la parte real e imaginaria de la función exponencial, evaluada para un argumento imaginario. plot real( exp(x*{0,1}) ), imag( exp(x*{0,1}) ) Transformaciones de Datos Transformaciones simples de datos Una función arbitraria puede ser aplicada a cada punto de datos como parte de la directiva using en el comando plot. Si un argumento a usar está encerrado entre paréntesis, este no será tratado como un número de columna, pero si como una expresión a ser evaluada. Dentro de los paréntesis, se puede acceder los valores de las columnas para el registro actual precediendo el número de la columna con el símbolo de moneda ($). Para grafica la raíz cuadrado de los valores encontrados en la segunda columna contra los valores en la primera columna, plot "precios" using 1:( sqrt($2) ) with lines Para graficar el promedio de la segunda columna y la tercera plot "precios" using 1:( ($2+$3)/2 ) with lines Pseudocolumnas y la columna función Gnuplot define dos pseudocolumnas que pueden ser usadas junto con las transformaciones de datos. La columna 0 contiene el número de línea en el conjunto de datos actual; la columna -2 contiene el índice del conjunto actual de datos dentro del archivo de datos. Cuando una doble línea en blanco es encontrada en el archivo, el número de línea se reinicia a cero y el índice del conjunto es incrementado. plot "precios" using 0:1 # Grafica la primera columna contra el número de línea plot "precios" using 1:-2 # Grafica el índice del conjunto de datos contra la # primera columna Con «set samples» se controla el cantidad de puntos con los que una función será evaluada para generar una gráfica. El valor por defecto son 100 puntos. La opción «set clip» controla como gnuplot pone los puntos que están muy cercanos o lejanos del rango de graficación: set clip points set clip [ one | two ] Trucos y advertencias * La división entera se trunca 1/4=>0 1/4.0=1.0/4=>0.25 * Para suprimir puntos de datos o generar un pedazo de una función emplear los valores no definidos. f(x) = abs(x) < 1 ? 1 : 1/0 plot [-2:2][0:2] f(x) plot "precios" using 1:( $2 < 100 ? $2 : 1/0 ) with linespoints,\ "" using 1:( $3 < 100 ? $3 : 1/0 ) w l Gráficas logarítmicas set logscale # set logscale x # set logscale y # unset logscale # unset logscale x # unset logscale y # Encender el graficado logarítmico en ambos ejes Encender el graficado logarítmico para el eje x solamente Encender el graficado logarítmico para el eje y solamente Apagar el graficado logarítmico en ambos ejes Apagar el graficado logarítmico para el eje x solamente Apagar el graficado logarítmico para el eje y solamente A continuación se muestran el nombre y el contenido de los archivos de datos empleados en este material. precios # Precio promedio de PQR y XYZ (en pesos por parte) por año calendario 1975 49 162 1976 52 144 1977 67 140 1978 53 122 1979 67 125 1980 46 117 1981 60 116 1982 50 113 1983 66 96 1984 70 101 1985 91 93 1986 133 92 1987 127 95 1988 136 79 3 gnuplot 1989 1990 1991 1992 1993 1994 1995 154 127 147 146 133 144 158 78 85 71 54 51 49 43 data # Simulación de transición Líquido/Sólido - densidad=0.0017 # x: primera col; corr(x): segunda col # t=0 0 0.99 1 0.03 2 0.01 3 0.02 4 0.01 # Temperatura de tres ciudades # Códigos de ciudades (3a columna): Morelia (=1), Zamora (=2), Uruapan (=3) # Formato: Año Temperatura Ciudad # ... Morelia y Zamora solamente, anualmente 1990 32 1 1990 29 2 1991 33 1 1991 27 2 1992 31 1 1992 29 2 1993 32 1 1993 26 2 # ... ahora Uruapan, bianual 1991 27 3 1993 29 3 desordenado # t=1000 0 0.98 1 0.10 2 0.05 3 0.01 4 0.02 1970 1974 1979 1971 1973 1978 1980 # t=2000 0 0.99 1 0.32 2 0.14 3 0.08 4 0.03 1 4 4 3 # ¡no ordenado! 6 5 2 Nota: el siguiente archivo deberá ser guardado con alguna codificación del tipo ISO-8859 para que se muestre correctamente las vocales acentuadas y la letra ñ genera.sh data2 # tiempo - valor 0 100.03 # 0 2.10 # 1 100.26 # 1 2.02 # 2 101.34 # 2 1.95 # 3 102.41 # 3 1.87 # descuidado temperatura presión t p t p t p echo echo echo echo echo echo echo echo echo echo set key on center top box > tmp.txt set terminal postscript enhanced color solid >> tmp.txt set encoding iso_8859_1 >> tmp.txt set xlabel \"Año\" >> tmp.txt set ylabel \"Precio Promedio Anual\" >> tmp.txt set title \"Comportamiento del Producto PQR vs XYZ\">>tmp.txt set xtics 2 >> tmp.txt set ytics nomirror \# Espejo del sistema primario apagado >> tmp.txt set y2tics 30,20,190 \# Encender el sistema secundario >> tmp.txt plot \\ >> tmp.txt echo echo echo echo [][20:200] \"\" using \"\" using \"\" using \"precios\" using 1:2 title \"Producto PQR\" w p,\\>>tmp.txt 1:2 smooth bezier title \"Aproximación PQR\" w l,\\>>tmp.txt 1:3 title \"Producto XYZ\" w p, \\ >> tmp.txt 1:3 smooth csplines title \"Aproximación XYZ\" w l>>tmp.txt cat tmp.txt | gnuplot > comportamiento.eps 4