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
> >
> >
>