Última actualización de este sitio: 29 noviembre, 2022


Estos ejemplos corresponden a figuras similares a la figura 2a de Salas et al. (2006) y figura 1 de Soto et al. (2010).

Cargando los datos de ejemplo

Ocuparemos la dataframe pspRuca del paquete datana del libro Análisis de datos con el programa estadístico R: una introducción aplicada de Salas-Eljatib (2021).

> library(datana)
> data(pspRuca)
> df <- pspRuca

revisemos los datos

> head(df) #primeras seis filas
  tree.no           spp status    dbh x.coord y.coord crown.class
1       1    N. obliqua      1  65.50  2.7282 0.62986           1
2       2  A. punctatum      1  75.90  9.1970 4.30179           1
3       3  A. punctatum      1  44.10 17.1026 0.62677           1
4       4 E. cordifolia      1 135.75 20.0614 0.57813           1
5       5  A. punctatum      1  78.25  3.9795 2.20588           1
6       6    N. obliqua      1  91.80  5.1683 1.88111           1
> nrow(df) #numero de filas de la dataframe
[1] 716

Esta dataframe contiene la información de coordenadas cartesianas de árboles en una parcela de muestreo de 10.000 m\(^2\) (1 hectárea) en un bosque adulto de Olivillo-Roble-Laurel-Ulmo en el predio Rucamanque (Depresión intermedia de la región de la Araucanía, Chile). Los datos fueron recolectados por Salas et al. (2006).

Los gráficos

Se muestra a continuación dos tipos de gráficos: uno donde se representan la distribución espacial de puntos y (b) otro donde además se incorpora información sobre una covariable observada en cada coordenada espacial. Ejemplos del primero se pueden observar en Salas et al. (2006) y del segundo en Soto et al. (2010).

Para realizar esta figura se cargará el paquete geoR Ribeiro and Diggle (2001) y otros relacionados como sigue

> library(geoR)
> library(splancs)
> library(spatstat)

Ahora se definen ciertas dataframes de grupos de datos que serán de nuestro interes

> # Creando las dataframes a ser usadas       
> p5ruca<-df[df[,"status"]==1,]  #todos los arboles vivos
> nvivos <- nrow(p5ruca)
> p5rucaAp<-df[df[,"spp"]=="A. punctatum"& df[,"status"]==1,] #vivos de Ap (Olivillo)
> p5rucaNo<-df[df[,"spp"]=="N. obliqua"& df[,"status"]==1,] #vivos de No (Roble)
> p5rucaLp<-df[df[,"spp"]=="L. philippiana"& df[,"status"]==1,] #vivos de Lp (Tepa)
> p5rucaDom<-df[df[,"crown.class"]==1& df[,"status"]==1,] #arboles dominantes vivos
> p5rucaDead<-df[df[,"status"]==2,]  #arboles muertos en pie
> ndead <- nrow(p5rucaDead)

Ahora creamos las respectivas geo-datas como sigue

> # Creando las "Geo"-dataframes a ser usadas
> p5ruca.geo<-as.geodata(p5ruca,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
> p5rucaAp.geo<-as.geodata(p5rucaAp,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
> p5rucaNo.geo<-as.geodata(p5rucaNo,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
> p5rucaLp.geo<-as.geodata(p5rucaLp,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
> p5rucaDom.geo<-as.geodata(p5rucaDom,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
> p5rucaDead.geo<-as.geodata(p5rucaDead,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))

Gráfico de distribucion espacial

> par(mfrow=c(3,2),mai=c(0.25,0.45,.1,0),mgp=c(2.6,1,0),las=1,cex=0.6,cex.lab=1,cex.axis=0.9,pty="s") 
> # ubicacion espacial de los arboles en la parcela
> range.x<-c(0,100);range.y<-c(0,100)
> plot.area<-max(range.x)*max(range.y)
>                                               
> # todas las especies                 
> plot(p5ruca.geo$coords[,1],p5ruca.geo$coords[,2], pch=16,cex=.75,
+    xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p")#,pch=".",cex=1.5)
> text(99, 100, expression(bold((a))))
> # Olivillio
> plot(p5rucaAp.geo$coords[,1],p5rucaAp.geo$coords[,2],col="green",#    pch=16,cex=1.5,
+    xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p",pch=16,cex=.75)#,pch=".",cex=1.5)
> text(99, 100, expression(bold((b))))
> # Roble
> plot(p5rucaNo.geo$coords[,1],p5rucaNo.geo$coords[,2],col="blue",#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=16,cex=.75)#,pch=".",cex=1.5)
> text(99, 100, expression(bold((c))))
> # Tepa
> plot(p5rucaLp.geo$coords[,1],p5rucaLp.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p",pch=16,cex=.75)
> text(99, 100, expression(bold((d))))
> # Arboles dominantes
> plot(p5rucaDom.geo$coords[,1],p5rucaDom.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=16,cex=.75)
> text(99, 100, expression(bold((e))))
> # Arboles vivos muertos en pie
> plot(p5rucaDead.geo$coords[,1],p5rucaDead.geo$coords[,2], col="red",#    pch=16,cex=1.5,
+    xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p",pch=16,cex=.75)
> text(99, 100, expression(bold((f))))

Una covariable en el espacio

> par(mfrow=c(3,2),mai=c(0.25,0.45,.1,0),mgp=c(2.6,1,0),las=1,cex=0.6,cex.lab=1,cex.axis=0.9,pty="s") 
> # tree location plot
> range.x<-c(0,100);range.y<-c(0,100)
> plot.area<-max(range.x)*max(range.y)
>                                               
> # All the Species                 
> plot(p5ruca.geo$coords[,1],p5ruca.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
> #add circles are proportional to the variate being displayed.
> symbols(p5ruca.geo$coords[,1], p5ruca.geo$coords[,2], 
+             circles = p5ruca.geo$data*100, add = T, inches =0.105, fg="blue")
> #add the response variable values
> #text(p5ruca.geo$coords[,1],p5ruca.geo$coords[,2],labels=p5ruca.geo$data,adj=c(0,1),cex=0.7)            
> 
> #lines(p5ruca.geo$coords[coords,1],p5ruca.geo$coords[coords,2],col="red",lwd=2)
> text(99, 100, expression(bold((a))))
> # Ap
> plot(p5rucaAp.geo$coords[,1],p5rucaAp.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
> #add circles are proportional to the variate being displayed.
> symbols(p5rucaAp.geo$coords[,1], p5rucaAp.geo$coords[,2], 
+             circles = p5rucaAp.geo$data*100, add = T, inches =0.105, fg="blue")
> #add the response variable values
> #text(p5rucaAp.geo$coords[,1],p5rucaAp.geo$coords[,2],labels=p5rucaAp.geo$data,adj=c(0,1),cex=0.7)            
> text(99, 100, expression(bold((b))))
> # No
> plot(p5rucaNo.geo$coords[,1],p5rucaNo.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
> #add circles are proportional to the variate being displayed.
> symbols(p5rucaNo.geo$coords[,1], p5rucaNo.geo$coords[,2], 
+             circles = p5rucaNo.geo$data*100, add = T, inches =0.105, fg="blue")
> #add the response variable values
> text(p5rucaNo.geo$coords[,1],p5rucaNo.geo$coords[,2],labels=p5rucaNo.geo$data,adj=c(0,1),cex=0.7)            
> text(99, 100, expression(bold((c))))
> # Lp
> plot(p5rucaLp.geo$coords[,1],p5rucaLp.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
> #add circles are proportional to the variate being displayed.
> symbols(p5rucaLp.geo$coords[,1], p5rucaLp.geo$coords[,2], 
+             circles = p5rucaLp.geo$data*100, add = T, inches =0.105, fg="blue")
> #add the response variable values
> text(p5rucaLp.geo$coords[,1],p5rucaLp.geo$coords[,2],labels=p5rucaLp.geo$data,adj=c(0,1),cex=0.7)            
> text(99, 100, expression(bold((d))))
> # Dominant trees
> plot(p5rucaDom.geo$coords[,1],p5rucaDom.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
> #add circles are proportional to the variate being displayed.
> symbols(p5rucaDom.geo$coords[,1], p5rucaDom.geo$coords[,2], 
+             circles = p5rucaDom.geo$data*100, add = T, inches =0.105, fg="blue")
> #add the response variable values
> #text(p5rucaDom.geo$coords[,1],p5rucaDom.geo$coords[,2],labels=p5rucaDom.geo$data,adj=c(0,1),cex=0.7)            
> text(99, 100, expression(bold((e))))
> # standing Dead trees
> plot(p5rucaDead.geo$coords[,1],p5rucaDead.geo$coords[,2],#    pch=16,cex=1.5,
+    xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
> #add circles are proportional to the variate being displayed.
> symbols(p5rucaDead.geo$coords[,1], p5rucaDead.geo$coords[,2], 
+             circles = p5rucaDead.geo$data*100, add = T, inches =0.105, fg="blue")
> #add the response variable values
> text(p5rucaDead.geo$coords[,1],p5rucaDead.geo$coords[,2],labels=p5rucaDead.geo$data,adj=c(0,1),cex=0.7) 
> text(99, 100, expression(bold((f))))

Referencias bibliográficas

Ribeiro, P. J., Jr., and P. J. Diggle. 2001. geoR: A package for geostatistical analysis.” R News 1 (2): 14–18.
Salas, C., V. LeMay, P. Núñez, P. Pacheco, and A. Espinosa. 2006. Spatial patterns in an old-growth Nothofagus obliqua forest in south-central Chile.” Forest Ecology and Management 231 (1-3): 38–46. https://doi.org/10.1016/j.foreco.2006.04.037.
Salas-Eljatib, C. 2021. Análisis de datos con el programa estadístico R: una introducción aplicada. Santiago, Chile: Ediciones Universidad Mayor. https://tienda.zigzag.cl/9789566086109-analisis-de-datos-con-el-programa-estadistico-r.html.
Soto, D. P., C. Salas, P. J. Donoso, and D. Uteau. 2010. Heterogeneidad estructural y espacial de un bosque mixto dominado por Nothofagus dombeyi después de un disturbio parcial.” Revista Chilena de Historia Natural 83 (3): 335–47. https://doi.org/10.4067/S0716-078X2010000300002.