################################################################################ ### TALLER FUNDAMENTOS DE R ### ### EJERCICIO 8.1: Gráficos ### ### ### ### Center for Conservation and Sustainable Development ### ### Missouri Botanical Garden ### ### Website: rbasicsworkshop.weebly.com ### ################################################################################ # Este ejercicio sólo incluye (al final) la respuesta para la última tarea, # trate de resolver cada tarea con el conocimiento que ha adquirido en el taller. ## TAREA 1 ## # Cargue la base de datos "Iris" de Edgar Anderson # Los siguientes argumentos se describen en la página de ayuda de la función # *plot.default*: "xlim" y "ylim." Utilize ambos argumentos en siguiente código # para modificar la gráfica resultante. Use varios valores para cada uno de los # dos argumentos, escogidos deacuerdo a su libre albedrío, y observe cómo cambia # la gráfica resultante. plot(iris$Petal.Width, iris$Sepal.Width) ## TAREA 2 ## # Vaya a la página de ayuda para la función *plot* y lea el texto sobre estos seis # argumentos: "type", "main", "sub", "xlab", "ylab", y "asp". Basado en su lectura # modifique el código anterior utilizando valores, escogidos según su voluntad, # para cada uno de los seis argumentos. Observe el cambio de la gráfica y asegúrese # de entender el efecto de cada argumento. ## TAREA 3 ## # Considere este cambio en el código de la Tarea 1: plot(iris$Petal.Width, iris$Sepal.Width, xlab="Petal Width (cm)", ylab="Sepal Width (cm)", cex.axis=1.5, cex.lab=1.5, bty="n", pch=19) # Note el uso del argumento "bty". Vaya a la página de ayuda para la función # *par* y lea sobre este argumento. Cambie el valor dado al argumento "bty" en # el código anterior para ver el efecto del argumento "bty". Asegúrese de utilizar # todos los posibles valores que pueden utilizarse para el argumento "bty", uno # a la vez. ## TAREA 4 ## # El siguiente código difiere del código de la Tarea 3 sólo en el uso del # argumento "type": plot(iris$Petal.Width, iris$Sepal.Width, xlab="Petal Width (cm)", ylab="Sepal Width (cm)", cex.axis=1.5, cex.lab=1.5, bty="n", pch=19, type="n") # Lea el texto sobre el argumento "type" en la ayuda para la función *plot* para # aprender el efecto de este argumento. A continuación, utilice el código anterior # como punto de partida para representar gráficamente la relación entre el ancho # del sépalo y el ancho del pétalo en la base de datos "Iris", mostrando cada # especie con un símbolo y color diferente. Vea la lista de símbolos disponibles # a través del argumento "pch" en la página 44 de "R ara principiantes" (Paradis # 2003). Vea también la descripción del argumento "pch" en la página de ayuda para # la función *par*. Para ver una lista de colores disponibles escriba en la consola # "colours()". Para completar esta tarea es necesario que utilice la función *points* # y que ponga en práctica sus conocimientos sobre indexación de objetos. ## TAREA 5 ## # Añada una leyenda al gráfico que ha creado en la Tarea 4 usando la función # *lengend*. Obtenga información acerca de esta función visitando la página de # ayuda correspondiente. ## TAREA 6 ## # Examine los datos de longitud del sépalo y ancho del pétalo utilizando # este código: summary(iris$Sepal.Length) summary(iris$Petal.Width) # Considere cuidadosamente el siguiente código que produce histogramas de # longitud del sépalo y ancho del pétalo en el mismo gráfico: hist(iris$Sepal.Length, breaks=seq(0,8,0.5), col="gray70", border="gray40", xlab="", ylab="", main="", xaxt="n", yaxt="n", ylim=c(0,40)) par(new=TRUE) hist(iris$Petal.Width, breaks=seq(0,8,0.5), density=30, xlab="", ylab="", main="", xaxt="n", yaxt="n", ylim=c(0,40)) # Lea en la página de ayuda para la funcion *par* la información sobre el # argumento "new". Use de las funciones "axis", "mtext" y "legend" para # agregar ejes, títulos de ejes y una leyenda al gráfico que creó con el # código anterior. ## TAREA 7 ## # El gráfico creado en la Tarea 6 puede tener un problema: el eje Y es # demasiado corto y deja parcialmente fuera una de las barras del histograma. # Modifique los valores en el argumento "ylim" para solucionar este problema. # Puede haber también un segundo problema: el título del eje vertical puede # estar cortado. Utilice el argumento "mar" de la función *par* para solucionar # este segundo problema. Lea el texto sobre el argumento "mar" en la página de # ayuda de la función "par". ## TAREA 8 ## # Use la función *layout* para dividir una ventana gráfica en un panel superior # y uno inferior. Lea la página de ayuda para la función *layout*. Basado en # la base de datos "Iris", grafique en el panel superior la relación entre # la amplitud de los pétalos (eje horizontal) y la amplitud de los sépalos (eje # vertical). Después, grafique en el panel inferior un histograma de la amplitud # de los pétalos. Asegúrese de que el eje horizontal sea el mismo en ambos # páneles, de tal forma que el histograma en el panle inferior refleje la # frecuencia de los valores en el panel superior. En ambos páneles debe utilizar # diferentes colores para representar diferentes especies de Iris, y los colores # deben ser consistentes en ambos páneles. Incluya una leyenda (o dos leyendas, # una por panel, si es necesario) que indique los símbolos y colores que utilizados # para representar cada una de las tres especies de Iris. ################################################################################ ### SOLUCIÓN PARA UNA TAREA #################################################### ################################################################################ ## TAREA 8 ## # divida la ventana gráfica layout(matrix(c(1,2), 2, 1)) layout.show(2) # código para la gráfica del panel superior par(mar=c(5, 5, 1, 2)) #increase left margin plot(iris$Petal.Width, iris$Sepal.Width, xlab="Petal width (cm)", type="n", xaxt="n", yaxt="n", ylab="Sepal width (cm)", cex.axis=1.5, cex.lab=1.5, bty="n", pch=19, xlim=c(0,2.5)) #use species names to index the data frame with Iris data, and plot data points #using different symbols for each species: points(iris$Petal.Width[iris$Species=="setosa"], iris$Sepal.Width[iris$Species=="setosa"], col="red", cex=1.5, pch=17) points(iris$Petal.Width[iris$Species=="versicolor"], iris$Sepal.Width[iris$Species=="versicolor"], col="royalblue", cex=1, pch=19) points(iris$Petal.Width[iris$Species=="virginica"], iris$Sepal.Width[iris$Species=="virginica"], col="green3", cex=2, pch=21, lwd=2) #add x-axis axis(1, at=seq(0, 2.5, 0.5), cex.axis=1.5, tcl=-1) axis(1, at=seq(0, 2.5, 0.1), labels=F, tcl=-0.5) axis(2, at=seq(2, 4, 0.5), labels=T, cex.axis=1.5, tcl=-1) axis(2, at=seq(0, 4, 0.1), labels=F, tcl=-0.5) #leyenda para el panel superior legend(x=0.8, y=4.4, c(expression(italic("Iris setosa")), expression(italic("Iris versicolor")), expression(italic("Iris virginica"))), pch=c(17,19,21), col=c("red", "royalblue", "green3"), pt.cex=c(1.5,1,2), pt.lwd=c(1,1,2), cex=1) #código para la gráfica del panel inferior hist(iris$Petal.Width[iris$Species=="versicolor"], breaks=seq(0,2.51,0.1), col="royalblue", border="blue4", xlab="", ylab="", main="", xaxt="n", yaxt="n", ylim=c(0,30)) par(new=T) hist(iris$Petal.Width[iris$Species=="virginica"], breaks=seq(0,2.51,0.1), col="green3", density=30, xlab="", ylab="", main="", xaxt="n", yaxt="n", ylim=c(0,30)) par(new=T) hist(iris$Petal.Width[iris$Species=="setosa"], breaks=seq(0,2.51,0.1), col="red", border="red3",, xlab="", ylab="", main="", xaxt="n", yaxt="n", ylim=c(0,30)) par(new=T) hist(numeric(0), breaks=seq(0,2.51,0.1), col="black", border="black",, xlab="", ylab="", main="", xaxt="n", yaxt="n", ylim=c(0,30)) #use of functions "axis" and "mtext" to add axes and axis titles: axis(1, at=seq(0, 2.5, 0.5), cex.axis=1.5, tcl=-1) axis(1, at=seq(0, 2.5, 0.1), labels=F, tcl=-0.5) mtext(side=1, "Petal width (cm)", line=3, cex=1.5) axis(2, at=seq(0, 30, 5), labels=T, cex.axis=1.5, tcl=-1) axis(2, at=seq(0, 30, 1), labels=F, tcl=-0.5) mtext(side=2, "Individuals", line=3, cex=1.5) #leyenda para el panel inferior legend(x=1.3, y=30, c(expression(italic("Iris setosa")), expression(italic("Iris versicolor")), expression(italic("Iris virginica"))), fill=c("red", "royalblue", "green3"), density=c(NA, NA, 30), angle=c(NA, NA, 45), border=c("red3", "blue", "green3"), cex=1)