2.3 Gr´aficos especiales en R
2.3.3 Pir´amide Poblacional
Este tipo de gr´aficos permite presentar en forma comparativa, la distribuci´on de la poblaci´on, por rangos de edad, seg´un dos grupos, por ejemplo, hombres y mujeres. Una pir´amide poblacional puede construirse en R a partir de las dos siguientes funciones:
piramide1<-function(hombres,mujeres,amplitud,escalax, edadmax,region){
max1<-max(c(hombres,mujeres)) n<-length(hombres)
0 5 10 15 20
0 1 2 3 4 5
dias
paciente
inicio fallo E1 E2 E1,2 censura
Carta Evento
Seguiemiento de 4 pacientes
Figura 2.25: Esta gr´afica presenta el gr´afico de eventos considerando la ocur- rencia de los eventos especiales E1, E2, y E1,2 para los datos supuestos en un experimento en el cual se observan los tiempos de vida de cuatro in- dividuos sometidos a un tratamiento espec´ıfico. Es obtenida con f ig1 <
−carta.eventos(paciente, inicio, dias, censura, especiales,1)
0 5 10 15 20
0 1 2 3 4 5
dias
paciente
inicio fallo E1 E2 E1,2 censura
Carta Evento
Seguiemiento de 4 pacientes
Figura 2.26: Esta gr´afica presenta el gr´afico de eventos sin consid- erar la ocurrencia de los eventos especiales E1, E2, y E1,2 para los mismos datos del ejemplo previo. Es obtenida con f ig2 <
−carta.eventos(paciente, inicio, dias, censura)
#Simetrizar la figura, ubicando datos de las mujeres
#a la izquierda de los hombres,
#Utilizar el factor de escala ’excalax’ para el eje x:
min.x<--(max1%/%escalax+1)*escalax max.x<-(max1%/%escalax+1)*escalax
#Abrir una ventana para el gr´afico
plot(0,0,type="n",xaxt=’n’,yaxt=’n’,ylim=c(0,edadmax+5), xlim=c(min.x,max.x),xlab="",ylab="")
#el anterior plot se utiliza para abrir
#la ventana de gr´aficos
#pero observe type="n",
#con ello se indica que no despliegue
#ning´un gr´afico y
#xaxt=’n’,yaxt=’n’ hace que los
#ejes no sean dibujados
#dibujar ejes y etiquetarlos:
ejex1<-seq(0,max1,by=escalax) ejex2<--ejex1[order(-ejex1)]
ejex<-c(ejex2,ejex1)
axis(1,at=ejex,labels=as.character(abs(ejex)), cex.axis=0.8,las=2)
ejey<-c(seq(0,edadmax,by=amplitud))
axis(2,at=ejey,labels=as.character(ejey),cex.axis=0.8,las=2) for(i in 1:n){
x1<-0
x2<-hombres[i] x3<--mujeres[i]
#permitir´a que los datos de las mujeres queden a la
#izquierda del grafico.
#las dos siguientes lineas
#definen los ticks de la escala de edad seg´un
#la amplitud (igual) de los intervalos elegidos:
y1<-(i-1)*amplitud y2<-y1+amplitud
#para dibujar la distribuci´on de los hombres
#llamamos la funci´on rect del R:
rect(x1,y1,x2,y2,col=’red’)
#para dibujar la distribuci´on de las mujeres en el
#mismo grafico, llamamos la funci´on
#rect de nuevo:
rect(x1,y1,x3,y2,col=’blue’)
#en la funci´on rect las coordenadas del rect´angulo
#se dan en orden x izquierdo, e
#inferior, x derecho, y superior }
#Ubicar leyendas y titulo:
x.l1<--max1/16-1.5*escalax x.l2<-max1/16+escalax title(main=paste("Pir´amide
Poblacional",sep="\n",region),ylab="edad")
legend(x.l1,edadmax+5,"mujeres",bty="n",xjust=1) legend(x.l2,edadmax+5,"hombres",bty="n")
}
Ejemplo 1: Pir´amide poblacional para la ciudad de Medell´ın seg´un censo de 1993:
pob<-read.table("c:/graficosr/datosgraficos/pobmedellin.txt", header=T)
> pob
grupoedad hombres mujeres
1 0-4 77674 75632
2 5-9 79523 77809
3 10-14 78607 79028
4 15-19 64907 76456
5 20-24 68331 86469
6 25-29 76046 92316
7 30-34 71487 84937
8 35-39 55728 69383
9 40-44 44853 54049
10 45-49 33646 40652 11 50-54 27500 34709 12 55-59 20762 27312 13 60-64 18981 26097 14 65-69 13516 18318
15 70-74 9510 13770
16 75-79 6190 9268
17 80-84 3490 5749
18 85-+ 2430 4835
mujeres<-pob[,3]
hombres<-pob[,2]
max(max(mujeres),max(hombres)) [1] 92316
#Por lo anterior un factor de escala
#apropiada en eje x es de 10000 amplitud<-5
escalax<-10000 edadmax<-90
region<-"Medell´ın"
fig<-piramide1(hombres,mujeres,amplitud,escalax, edadmax,region)
Ejemplo 2: Otro posible presentaci´on de una pir´amide poblacional puede ser tambi´en como la que ofrece la siguiente funci´on:
piramide2<-function(hombres,mujeres,amplitud,escalax, edadmax,region){
max1<-max(c(hombres,mujeres)) min.x<--(max1%/%escalax+1)*escalax max.x<-(max1%/%escalax+1)*escalax n<-length(hombres)
plot(0,0,type="n",xaxt=’n’,yaxt=’n’,ylim=c(0,edadmax+5), xlim=c(min.x-2*escalax,max.x+2*escalax),xlab="",ylab="") ejex1<-seq(2*escalax,max.x+2*escalax,,by=escalax)
ejex2<--ejex1[order(-ejex1)]
ejex<-c(ejex2,ejex1)
ejexe1<-seq(0,max.x,by=escalax)
90000 80000 70000 60000 50000 40000 30000 20000 10000 00 10000 20000 30000 40000 50000 60000 70000 80000 90000 0
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90
Pirámide Poblacional Medellín
edad
mujeres hombres
Figura 2.27: Pir´amide poblacional con base en datos del ´ultimo censo efectu- ado en octubre de 1993, constru´ıda con la funci´on ‘piramide1’.
ejexe2<--ejexe1[order(-ejexe1)]
ejexe<-c(ejexe2,ejexe1)
axis(1,at=ejex,labels=as.character(abs(ejexe)), cex.axis=0.8,las=2)
ejey<-c(seq(0,edadmax,by=amplitud))
axis(2,at=ejey,labels=as.character(ejey), cex.axis=0.6,las=2,pos=0)
for(i in 1:n){
x1<-2*escalax
x2<-hombres[i]+2*escalax x3<--mujeres[i]-2*escalax y1<-(i-1)*amplitud
y2<-y1+amplitud
rect(x1,y1,x2,y2,col=’red’) rect(-x1,y1,x3,y2,col=’blue’) }
x.l1<--max1/16-2.5*escalax x.l2<-max1/16+2*escalax
title(main=paste("Pir´amide Poblacional",sep="\n",region)) legend(x.l1,edadmax+5,"mujeres",bty="n",xjust=1)
legend(x.l2,edadmax+5,"hombres",bty="n")
legend(0,edadmax+10,"edad",bty=’n’,xjust=0.5,adj=c(0.5,0.5)) }
Que aplicada sobre los datos de poblaci´on para la ciudad de Medell´ın:
amplitud<-5 escalax<-10000 edadmax<-90
region<-"Medell´ın"
fig<-piramide2(hombres,mujeres,amplitud,escalax, edadmax,region)
1e+05 90000 80000 70000 60000 50000 40000 30000 20000 10000 0 0 10000 20000 30000 40000 50000 60000 70000 80000 90000 1e+05
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90
Pirámide Poblacional Medellín
mujeres hombres
edad
Figura 2.28: Pir´amide poblacional obtenida con la funci´on ‘piramide2’.
Cap´ıtulo 3
Gr´ aficos Multivariables en R
3.1 Gr´ aficos de Dispersi´ on
Es tal vez el m´as antiguo de los gr´aficos multivariables. Est´a limitado a la presentaci´on de dos variables, aunque se pueden realizar modificaciones de tal forma que nos permita incluir m´as.
En R obtenemos este gr´afico mediante la funci´on plot:
plot(x, ...)
plot(x, y, xlim=range(x), ylim=range(y), type="p", main, xlab, ylab, ...)
plot(y ~ x, ...) Donde:
• x: Objeto que contiene las coordenadas de los puntos del gr´afico.
• y: Las coordenadas y de los puntos, sin embargo resulta innecesario cuando el objeto x tiene la estructura apropiada para dar ambas coor- denadas
• xlim, ylim: Los rangos para los ejes x ey respectivamente.
• type: Para especificar el tipo de gr´afico, as´ı : 1. “p” para puntos, lo cual es por defecto 2. “l” para trazar l´ıneas entre los puntos 3. “b” para puntos y l´ıneas
4. “o” para puntos y l´ıneas superpuestos
5. “h” para un histograma pero en vez de rect´angulos traza l´ıneas verticales
6. “s” Para gr´aficos en escala 7. “S” Otros gr´aficos en escala
8. “n” Para que no aparezca el gr´afico.
• main: Para titular al gr´afico.
• xlab, ylab: Para etiquetar a los ejes.
• ...: Otros par´ametros gr´aficos.
En el argumento “type” se especifica igual a “p” para representar las ob- servaciones por puntos, aunque este es el valor por defecto y por tanto no es necesario especificarlo. En el siguiente ejemplo se observa el uso de esta funci´on:
preciosr9<-matrix(scan("c:/graficosr/graficos/r9.txt"), ncol=13,byrow=T)
ano<-preciosr9[1,]
valor<-preciosr9[2,]
plot(ano,valor,main=’Precio de Oferta Renault 9 vs. A~no’,xlab=’a~no’,ylab=’valor’,pch=19)