Edición. Fórmulas
Libreria
- ggplot2
Introducción
En este tutorial veremos como insertar fórmulas matemáticas en las figuras de ggplot. Esencialmente hay dos maneras que se pueden emplear
- Para incluir símbolos en las leyendas es preferible emplear la función expression()
- Para incluir símbolos en el cuerpo de la figura puede emplear annotate()
Ejemplo 1
Lo primero es generar un modelo matemático, en este ejemplo es la función de Briere, que representa la tasa de desarrollo de organismos poiquilotérmicos. La ecuación es:
Donde D es la tasa de desarrollo, el recíproco del tiempo de desarrollo, usualmente expresado en 1/d (1/dia), alpha es un coeficiente de decaimiento, Tmin es el umbral inferior de desarrollo y Tmax es el umbral superior de desarrollo y T es la temperatura.
Para generar solamente una función se emplea stat_function(fun= myfun, args=list(par1,par2)), donde myfun es una función definida por el usuario y args son los argumentos adicionales en la función. La función personalizada myfun debe tener como primer argumento a la variable x y luego el resto de los mismos.
Un script que genera la función de briere con alpha=0.0003, Tmin= 12 y Tmax= 36 es:
# Define Briere equation
fBriere<-function(x, pmin, pmax, pac){
result<- pac*x*(x - pmin)*sqrt(pmax - x);
return(result)
}
# Generate plot
eq1<-ggplot(data.frame(x = c(12, 36)), aes(x)) + stat_function(fun = fBriere,args=list(pmin=12,pmax=36,pac=0.0003), geom = "line",size=1.5, colour='blue') + theme_bw() + theme(panel.grid = element_blank()) + labs(x="TEMPERATURA", y="DESARROLLO 1/d")
Ahora, para escribir la formula, se emplea annotate:
eq1 + annotate("text", x=18, y=0.35, label="D=='0.0003'*T*(T - 12)*sqrt(36 - T)", parse=TRUE, size=8)
La función annotate recibe seis argumentos, el primero es el tipo de salida, en este caso texto, las dos siguientes son las coordenadas x e y en las unidades de los ejes cartesianos donde se empezará a dibujar el texto. El siguiente argumento es label= " ", que contiene las instrucciones para construir la formula. R puede interpretar diferentes simbolos de la libreria plotmath.
La interpretación de los componentes de la expresión es la siguiente:
D es únicamente el símbolo D
== se interpreta como el símbolo igual =
'0.0003' es la cadena de caracteres tal cual, tiene que ir encerrada en los apóstrofes, si se escribe sin los apóstrofes R lo dibuja en notación exponencial
* es un separador invisible
T es el símbolo T
* separador invisible
(T-12) expresión tal cual
sqrt() es la raíz cuadrada
36-T son los caracteres tal cual
parse=TRUE le indica a R que debe interpretar lo que hay en label como notación matemática
size es el tamaño de la letra
Para incluir notación matemática en las etiquetas de los ejes, se puede emplear expression():
eq1 + xlab(expression(paste("TEMPERATURA ",'(',degree*C,')')))+ ylab(expression(paste("DESARROLLO ",'(',d^{-1},')')))+ theme(text=element_text(size=20))
En este caso se emplea expression(), que contiene paste(arg1, arg2, arg3...) y arg son los argumentos de la función. Esta última función concatena los caracteres que se encuentran separados por comas; para el caso de xlab:
arg1
"TEMPERATURA" lo dibuja tal cual pues se encuentra encerrado en comillas
arg2
'(' es el simbolo de paréntesis ( y debe ir entre comillas sencillas
arg3
degree*C es el ´simbolo de grados y el símbolo C, el asterisco * funciona como un separador invisible
arg4
')' es el simbolo de paréntesis ) y deben ir en comillas sencillas
Para el caso de ylab:
arg1
"DESARROLLO " Es la cadena de caracteres tal cual
arg2
'(' Es el paréntesis izquierdo
arg3
d^{-1} Es el valor de d elevado a la potencia -1,^ es la notación de supraíndice, los corchetes son agrupadores invisibles
arg4
')' Es el paréntesis derecho, se encuentra entre comillas sencillas
Por otra parte
theme(text=element_text(size=20)) cambia el tamaño de letra a 20
Lo anterior genera la siguiente figura:
Ejemplo 2
En este caso se va a generar una figura con una formula que representa una función aplicada a muestreo secuencial de totales.
La ecuación es:
La ecuación anterior genera totales (Tn) para un tamaño de muestra n y una precision relativa a la media D (0<D<1), empleando los parámetros a y b del modelo de Taylor.
las instrucciones para generar la gráfica son:
# Define Green Fixed Sample Size
fGreen<-function (x, ap, bp, Dp){
result<- ap*x^(bp-2)/(Dp^2);
return(result)
}
# Define parameters of TPL and precision D
aa<- 0.8491
bb<- 0.9539
D10<- 0.10
D25<- 0.25
# Define x range
xx<-seq(0.02,0.30, by= 0.005)
green1<-ggplot(data.frame(x = c(0.02,0.3)), aes(x)) + stat_function(fun = fGreen,args= list(ap= aa, bp= bb, Dp= D10), geom = "line",size=1.5, colour= 'red') + stat_function(fun = fGreen,args= list(ap= aa, bp= bb, Dp= D25), geom ="line",size= 1.5, colour= 'blue') + theme_bw() + theme(panel.grid = element_blank()) + labs(x="Tamaño de Muestra n", y="Total acumulado Tn") + theme(text=element_text(size= 17))
La figura es:
Las siguientes instrucciones generan la formula en la gráfica
green2<- green1 + annotate("text", x=0.15, y= 4000,label="Tn==bgroup('(',frac(a%.%n^{1-b},D^2), ')')^{frac(1,(2-b))}", parse=TRUE, size= 9)
Para finalizar es conveniente incluir etiquetas para las líneas, en este caso las instrucciones son manuales:
green2 + geom_segment(aes(x = 0.2, y = 2500, xend = 0.22, yend = 2500),colour='blue',size=1.2)+ geom_segment(aes(x = 0.2, y = 2750, xend = 0.22, yend = 2750),colour='red',size=1.2) + geom_text(label="D10",x=0.23,y=2750)+ geom_text(label="D25",x=0.23,y=2500)
Esencialmente, para poner las etiquetas de la leyenda hay que hacer dos cosas:
* Generar la linea
* Poner el texto
La línea se genera con la instrucción geom_segment():
geom_segment(aes(x = 0.2, y = 2750, xend = 0.22, yend = 2750), colour='red', size=1.2)
En este caso, los valores de x,y dentro de aes() corresponden a los valores iniciales y finales de la linea. El color y el grosor lo determinan las instrucciones colour y size, respectivamente.
El texto se genera con geom_text():
geom_text(label="D10",x=0.23,y=2750)
label es el contenido de texto, mientras que x, y son las coordenadas cartesianas iniciales en donde se anota el texto.
Y se genera la siguiente figura:
Enlaces útiles
Contiene un listado de operadores, símbolos, estilos, agrupadores, etc. que se pueden incluir en la gráfica.
http://vis.supstat.com/2013/04/mathematical-annotation-in-r/