Trucos R. Gráficos de velocímetro con R

20 Mar

Hoy toca homenaje a 2 lectores del blog. Es la primera versión de un gráfico en forma de velocímetro con R. Cuando disponga de más tiempo modificaré la versión para darle mayor vistosidad. Como es habitual el truco nos servirá para trabajar con un interesante paquete de R como RColorBrewer. Un paquete que me descubrió un lector. El resultado final no es muy espectacular (de momento):

velocimetro_r.png

De momento la versión más sencilla. Veamos el código R que representa el semicírculo y posteriormente lo analizaremos. Me gustaría que también lo ejecutéis vosotros para comentarme posibles incidencias. Se genera el gráfico como PNG en C:\temp:

#Datos a graficar
x=seq(-1,1,by=0.001)
y=sqrt(1-x**2)
#Cargamos la librería
library("RColorBrewer")
win.graph()
#Guardamos el resultado como PNG
png(file="C:\\temp\\velocimetro_R.png",width=600, height=450)


#Pintamos un gráfico sin nada
plot(rep(10,10),rep(10,10),ann=FALSE,type="n",
,xlim=c(-1,1),ylim=c(0,1),axes=FALSE)
#Creamos un diagrama de barras con una escala de colores que
#empieza en el rojo y finaliza en el verde. Hemos de especificar
#el número de grupos, en este caso la longitud del vector que
#estamos representando
lines(x,y,type="h",lwd=12,
col=colorRampPalette(brewer.pal(9,"RdYlGn"))(length(x)))
#Un semicírculo para crear una rosquilla
lines(x,sqrt(0.5-x**2),type="h",lwd=12,col="white")

La librería RColorBrewer nos permite emplear distintas paletas de colores que podemos ver con la función display.brewer.all() en este caso se empleamos los 9 colores de rojo a verde con RdYlGn al lado tenemos que poner un número que nos permite crear la escala de colores.  Con lines y type=»h» creamos barras verticales con la forma circular. Para que nos quede una rosquilla no se me ha ocurrido nada mejor que superponer una línea de barras verticales en blanco. Evidentemente  se puede mejorar.

Ahora tenemos que pintar la línea. De momento grafico lo más sencillo, porcentajes que vayan de 0 a 100:

porcentaje=1
posicion=round((porcentaje*length(x))/100)-10
posicion
dx=c(0,x[posicion])
dy=c(0.03,y[posicion])
lines(dx,dy,lwd=10,col="gainsboro")
points(0,.03,lwd=10,col="gainsboro")
dev.off()

La línea parte del punto (0,0.03) y va hasta una posición entre el 0 y la longitud del vector que representa el semicírculo. En este caso el 1% será la posición 200 del semicírculo. No puede ser más sencillo. Como último paso pinto un punto con función estética. Como ya os comenté esta es una versión beta del gráfico. Será interesante poner escalas, números, una aguja y representar muchos gráficos de forma ordenada. También estoy abierto a otras sugerencias, de hecho este gráfico es una ídea que me dieron dos lectores.

4 respuestas a «Trucos R. Gráficos de velocímetro con R»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *