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/