Hola a todos, Estoy tratando de generar un line plot para las cuatro primeras columnas del banco de datos airquality del paquete datasets. Siempre que genero gráficos, personalizo las etiquetas de los ejes mediante la función axis para que me queden equiespaciadas. En este caso, los gráficos los represento todos en un mismo dispositivo mediante un bucle for, en el que en cada iteración dibujo las etiquetas con la función axis(). Este es el código que he escrito: datos <- airquality attach(datos) par(mfrow = c(2,2)) ylab <- c("Concentracion media de ozono (ppb)", "Radiacion solar (Langleys)", "Velocidad del viento (mph)", "Temperatura (grados F)") #Obtengo los extremos de las columnas de cara al etiquetado del eje y: e <- list() for(i in 1:4){ e[[i]] <- c(round(min(datos[,i], na.rm=T)), round(max(datos[,i], na.rm=T))) e[[i]] <- round(e[[i]] / 5) * 5 } #Estos números me sirven para equiespaciar las etiquetas: d <- c(34,66,5,10) #Represento los gráficos: for(i in 1:4){ plot(datos[,i], ylab=ylab[i], yaxt="n", type = "n") axis(2, at = seq(e[[i]][1], e[[i]][2],d[i]), labels = seq(e[[i]][1], e[[i]][2],d[i])) lines(datos[,i], col=i+1) } Adjunto en el pdf los gráficos que genero. El problema que tengo es que los gráficos de la parte superior sí me aparecen las etiquetas del eje y equiespaciadas, pero los de la parte inferior no. ¿Alguien puede darme alguna explicación?. He leído ?axis, ?par, etcétera, pero no logro averiguar nada. Sería de mucha ayuda cualquier sugerencia. Muchas gracias de antemano. Un saludo, Guillermo ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: airquality.pdf Type: application/pdf Size: 16284 bytes Desc: URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20110123/81a405d5/attachment.pdf>
Hola, Los intervalos claro que están equiespaciados. En "d[i]" indicas el valor del salto de cada marca. Lo que entiendo de lo que comentas es que en los gráficos inferiores, el espacio entre la la esquina inferior del eje y la primera marca, o la esquina superior y la última marca no es la misma. La corrección que se me ocurre, para el tercer gráfico es justamente en el espaciado "d[i]" que has utilizado. Si para los dos últimos gráficos utilizas un espaciado diferente, por ejemplo d[3]<-2 en vez del valor 5 que has utilizado la "impresión" esa diferencia no existe o es mínima. Y para el último gráfico, la forma que he visto de centrarlo más es eligiendo un punto de arranque para el emplazamiento de las etiquetas diferente al "e[[i]][1]", si utilizas por ejemplo "0.925*e[[i]][1]", queda bastante centrado. Otro elemento de mejora que podrías introducir, puestos a esto de la estética gráfica, es el de colocar las marcas del eje-y de forma perpendicular "las=2". Saludos, Carlos Ortega www.qualityexcellence.es www.datanalytics.com/blog 2011/1/23 <guivivi@alumni.uv.es>> Hola a todos, > > Estoy tratando de generar un line plot para las cuatro primeras columnas > del banco de datos airquality del paquete datasets. > > Siempre que genero gráficos, personalizo las etiquetas de los ejes > mediante la función axis para que me queden equiespaciadas. > > En este caso, los gráficos los represento todos en un mismo dispositivo > mediante un bucle for, en el que en cada iteración dibujo las etiquetas > con la función axis(). > > Este es el código que he escrito: > > datos <- airquality > attach(datos) > > par(mfrow = c(2,2)) > ylab <- c("Concentracion media de ozono (ppb)", "Radiacion solar > (Langleys)", "Velocidad del viento (mph)", "Temperatura (grados F)") > > #Obtengo los extremos de las columnas de cara al etiquetado del eje y: > e <- list() > for(i in 1:4){ > e[[i]] <- c(round(min(datos[,i], na.rm=T)), round(max(datos[,i], > na.rm=T))) > e[[i]] <- round(e[[i]] / 5) * 5 > } > > #Estos números me sirven para equiespaciar las etiquetas: > d <- c(34,66,5,10) > > #Represento los gráficos: > for(i in 1:4){ > plot(datos[,i], ylab=ylab[i], yaxt="n", type = "n") > axis(2, at = seq(e[[i]][1], e[[i]][2],d[i]), labels = seq(e[[i]][1], > e[[i]][2],d[i])) > lines(datos[,i], col=i+1) > } > > Adjunto en el pdf los gráficos que genero. > > El problema que tengo es que los gráficos de la parte superior sí me > aparecen las etiquetas del eje y equiespaciadas, pero los de la > parte inferior no. > > ¿Alguien puede darme alguna explicación?. > > He leído ?axis, ?par, etcétera, pero no logro averiguar nada. > > Sería de mucha ayuda cualquier sugerencia. > > Muchas gracias de antemano. > > Un saludo, > > Guillermo > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Buenos días Carlos, Anoche formulé mal la pregunta, de hecho, de camino hoy al trabajo venía pensando que lo tenía que haber explicado mejor, lo que quería decir es exactamente lo que tú me comentas, que el espacio entre la esquina inferior y la primera marca y el espacio entre la esquina superior y la última marca no era el mismo y buscaba cómo corregirlo. Con todo lo que me has sugerido, he conseguido una mejora en la creación de los gráficos, he añadido además el parámetro cex.axis para disminuir el tamaño de las etiquetas y que me salieran de este modo todos los "ticks" etiquetados. Copio el código para quien le pueda ser de utilidad. datos <- airquality attach(datos) par(mfrow = c(2,2)) ylab <- c("Concentracion media de ozono (ppb)", "Radiacion solar (Langleys)", "Velocidad del viento (mph)", "Temperatura (grados F)") #Obtengo los extremos de las columnas de cara al etiquetado del eje y: e <- list() for(i in 1:4){ e[[i]] <- c(round(min(datos[,i], na.rm=T)), round(max(datos[,i], na.rm=T))) e[[i]] <- round(e[[i]] / 5) * 5 } #Estos números me sirven para equiespaciar las etiquetas: d <- c(34,66,2,9) #Represento los gráficos: for(i in 1:4){ plot(datos[,i], ylab=ylab[i], xlab="Dias", yaxt="n", type = "n",las=2, cex.axis=0.7) axis(2, at = seq(floor(0.925*e[[i]][1]), e[[i]][2],d[i]), labels = seq(floor(0.925*e[[i]][1]), e[[i]][2],d[i]),cex.axis=0.7) lines(datos[,i], col=i+1) } ########## Muchas gracias Carlos por tu ayuda. Un saludo y feliz día. Guillermo> Hola, > > Los intervalos claro que están equiespaciados. En "d[i]" indicas el valor > del salto de cada marca. > Lo que entiendo de lo que comentas es que en los gráficos inferiores, el > espacio entre la la esquina inferior del eje y la primera marca, o la > esquina superior y la última marca no es la misma. > > La corrección que se me ocurre, para el tercer gráfico es justamente en el > espaciado "d[i]" que has utilizado. > Si para los dos últimos gráficos utilizas un espaciado diferente, por > ejemplo d[3]<-2 en vez del valor 5 que has utilizado la "impresión" esa > diferencia no existe o es mínima. > > Y para el último gráfico, la forma que he visto de centrarlo más es > eligiendo un punto de arranque para el emplazamiento de las etiquetas > diferente al "e[[i]][1]", si utilizas por ejemplo "0.925*e[[i]][1]", queda > bastante centrado. > > Otro elemento de mejora que podrías introducir, puestos a esto de la > estética gráfica, es el de colocar las marcas del eje-y de forma > perpendicular "las=2". > > Saludos, > Carlos Ortega > www.qualityexcellence.es > www.datanalytics.com/blog > > 2011/1/23 <guivivi en alumni.uv.es> > > > Hola a todos, > > > > Estoy tratando de generar un line plot para las cuatro primeras columnas > > del banco de datos airquality del paquete datasets. > > > > Siempre que genero gráficos, personalizo las etiquetas de los ejes > > mediante la función axis para que me queden equiespaciadas. > > > > En este caso, los gráficos los represento todos en un mismo dispositivo > > mediante un bucle for, en el que en cada iteración dibujo las etiquetas > > con la función axis(). > > > > Este es el código que he escrito: > > > > datos <- airquality > > attach(datos) > > > > par(mfrow = c(2,2)) > > ylab <- c("Concentracion media de ozono (ppb)", "Radiacion solar > > (Langleys)", "Velocidad del viento (mph)", "Temperatura (grados F)") > > > > #Obtengo los extremos de las columnas de cara al etiquetado del eje y: > > e <- list() > > for(i in 1:4){ > > e[[i]] <- c(round(min(datos[,i], na.rm=T)), round(max(datos[,i], > > na.rm=T))) > > e[[i]] <- round(e[[i]] / 5) * 5 > > } > > > > #Estos números me sirven para equiespaciar las etiquetas: > > d <- c(34,66,5,10) > > > > #Represento los gráficos: > > for(i in 1:4){ > > plot(datos[,i], ylab=ylab[i], yaxt="n", type = "n") > > axis(2, at = seq(e[[i]][1], e[[i]][2],d[i]), labels = seq(e[[i]][1], > > e[[i]][2],d[i])) > > lines(datos[,i], col=i+1) > > } > > > > Adjunto en el pdf los gráficos que genero. > > > > El problema que tengo es que los gráficos de la parte superior sí me > > aparecen las etiquetas del eje y equiespaciadas, pero los de la > > parte inferior no. > > > > ¿Alguien puede darme alguna explicación?. > > > > He leído ?axis, ?par, etcétera, pero no logro averiguar nada. > > > > Sería de mucha ayuda cualquier sugerencia. > > > > Muchas gracias de antemano. > > > > Un saludo, > > > > Guillermo > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > >