5.5 Interacción básica con gráficos

Una vez dibujado un gráfico, nos puede interesar en ocasiones interactuar con él, por ejemplo, para obtener información sobre un punto concreto o etiquetarlo. Para conseguir esta funcionalidad, una vez dibujado el gráfico con plot podemos utilizar la función identify de R.

Por ejemplo, supongamos que hemos realizado la siguiente representación gráfica:

x<-seq(1,5,0.2) 
y<-log(sin(x)^2) 
plot(x,y,col='blue',type='b', ylim=c(-6,1)) 
Ejemplo de función con un mínimo.

Figura 5.17: Ejemplo de función con un mínimo.

Queremos obtener las coordenadas de tres puntos de la función: el mínimo y los puntos donde cambia de tendencia de creciente a decreciente. Para conseguir esta información podemos ejecutar:

pos<-identify(x,y, plot=FALSE, n=3) 

Donde indicamos la secuencia de coordenadas x e y; que no queremos que se añada información al gráfico con plot=FALSE (veremos luego cómo hacer que sí se añada una etiqueta) y el número de puntos que queremos identificar (en nuestro caso tres). Tras ejecutar el comando, veremos que el terminal de R queda bloqueado a la espera de que seleccionemos los puntos en el gráfico. Para ello, haremos clic con el ratón en la figura, en los puntos de interés. Cuando hayamos alcanzado el número indicado, veremos que el terminal nos devuelve el control, y que, en la variable pos, queda almacenado el índice de los puntos seleccionados en los vectores x e y:

pos 
# [1]  4 12 19 
x[[12]] 
# [1] 3.2 
y[[12]] 
# [1] -5.681764 
min(y) 
# [1] -5.681764 

Se puede ver que, efectivamente, en la posición 12 estamos obteniendo los valores x e y del mínimo.

Utilizando identify, también es posible etiquetar puntos concretos. Por ejemplo, supongamos que queremos etiquetar el mínimo con la cadena de caracteres «A» y los otros dos puntos con la etiqueta «B». Entonces podemos ejecutar la secuencia de expresiones:

x<-seq(1,5,0.2) 
y<-log(sin(x)^2) 

identify(x,y, labels="A", n=1)    # Seleccionamos el mínimo con el ratón 
# [1] 12 
identify(x,y, labels="B", n=2)    # Seleccionamos los otros dos puntos 
# [1]  4 19 
x<-seq(1,5,0.2) 
y<-log(sin(x)^2) 
plot(x,y,col='blue',type='b', ylim=c(-6,1)) 
Imagen etiquetada de manera interactiva.

Figura 5.18: Imagen etiquetada de manera interactiva.

Un resultado similar se podría obtener utilizando identify simplemente para identificar los puntos y más tarde dibujando las etiquetas con text.

Puede que en ocasiones no sepamos a priori el número de puntos a identificar. En ese caso podemos omitir el parámetro n y simplemente seleccionar lo que necesitemos, terminando la selección mediante la pulsación del botón derecho o la tecla escape (dependiendo del sistema).