[R-es] problema con los cambios de marcas temporales en el eje X

Carlos Ortega cof en qualityexcellence.es
Mar Sep 9 00:08:47 CEST 2014


Hola,

He buscado una solución a partir de los datos originales. La alternativa de
introducir una serie adicional con el primer día del mes sobre el
data.frame original, tiene el problema que en la serie original las fechas
no coinciden con esos primeros días del mes.

Aunque hay que darle unas cuantas vueltas para construir las etiquetas de
los ejes, evitando la repetición del mes o del año, al final creo que queda
como querías...

#---------------------------
datIn <- read.csv("Libro1.csv", header=T, sep=";", dec=",")

library(lubridate)
datIn$xlabels <- as.Date(dmy(datIn$fecha), format="%Y-%m-%d")
datIn$mes <- month(dmy(datIn$fecha), label=T, abbr=T)
datIn$anio <- year(dmy(datIn$fecha))
datIn$mesanio <- paste(datIn$mes,"-",datIn$anio,sep="")

for(i in 1:length(datIn$mes)) {
  if(i>1) {
    if(datIn$mes[i]==datIn$mes[i-1]) {
       datIn$mesx[i] <- c("")
    } else {
     mestmp <- as.character(datIn$mes[i])
     datIn$mesx[i] <-mestmp
    }
  } else { datIn$mesx[i] <- as.character(datIn$mes[i]) }
}
for(i in 1:length(datIn$anio)) {
  if(i>1) {
    if(datIn$anio[i]==datIn$anio[i-1]) {
      datIn$aniox[i] <- c("")
    } else {
      aniotmp <- datIn$anio[i]
      datIn$aniox[i] <-aniotmp
    }
  } else { datIn$aniox[i] <- datIn$anio[i] }
}

for(i in 1:length(datIn$mesx)) {
  if(nchar(datIn$mesx[i])>0 & nchar(datIn$aniox[i])>0 ) {
    datIn$labx[i] <- paste(datIn$mesx[i],"-",datIn$aniox[i], sep="")
  }
  if(nchar(datIn$mesx[i])>0 & nchar(datIn$aniox[i])==0) {
    datIn$labx[i] <- datIn$mesx[i]
  }
  if(nchar(datIn$mesx[i])==0 & nchar(datIn$aniox[i])==0) { datIn$labx[i] <-
c('') }
}

plot (
  datIn$xbar ~ datIn$xlabels
  ,ylim=c(400,660), xaxt="n", type="b", pch=19,cex=1,
  ,xlab="Fecha", ylab="Value"
  ,axes=F
)
axis.Date(
           1,at=datIn$xlabels[nchar(datIn$labx)>0],format="%b-%y"
           ,labels=datIn$labx[nchar(datIn$labx)>0]
           ,las=1, cex.axis=0.8, col.axis="blue", font.axis=2
         )

axis(2, col.axis="blue", las=1, font.axis=2)
box()
arrows(
  x0=datIn$xlabels,y0=datIn$lci
  ,x1=datIn$xlabels,y1=datIn$lcs
  ,angle=90,code=3,length=.1
)



#-----------------------

[image: Imágenes integradas 1]


El 8 de septiembre de 2014, 21:12, Carlos Fernández-Delgado <ba1fedec en uco.es
> escribió:

> Hola de nuevo, acabo de encontrar la solución. He creado una variable
> ficticia con los días 1 de cada mes en la secuencia temporal que quería y
> después he actuado de la siguiente manera
>
> attach(Libro1)
> plot (xbar~as.Date(fecha,"%d/%m/%y"), type="b", pch=19,cex=2,xaxt="n")
> xlabels<-strptime(ofeje, format = "%d/%m/%y")
> axis.Date(1, at=xlabels[xlabels$mday==1], format="%b-%y")
>
>
> El resultado se plasma en la grafica adjunta, por si alguien está
> interesado también envío la base de datos con la variable ficticia. Muchas
> gracias y disculpas por las molestias.
> Un cordial saludo.
> Carlos
>
>
> El 08/09/2014, a las 00:05, Carlos Ortega <cof en qualityexcellence.es>
> escribió:
>
> Hola,
>
> Una forma de hacerlo es:
> 1. incluyes un parámetro en "plot(..., axes=F)" y así indicas que no
> quieres pintar automáticamente los ejes.
> 2. Y ahora construyes el eje "x" con la función "axis()".
> 3. Dentro de axis(), dirás cada cuánto quieres pintar una marca (parámetro
> "at") y qué quieres incluir en la marca (parámetro "label").
>
> Para ver un ejemplo, mira el ejemplo que aparece en la ayuda de la función
> "axis()".
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
> El 7 de septiembre de 2014, 20:46, Carlos Fernández-Delgado <
> ba1fedec en uco.es> escribió:
>
>> Estimada Comunidad, solicito vuestra ayuda en un tema quizás un poco
>> tonto, pero no logro dar con la tecla.
>> Estoy intentando hacer una gráfica de la evolución temporal de una
>> variable (xbar) a lo largo del tiempo.
>> La secuencia que he hecho es la siguiente:
>> attach(Libro1)
>> plot (xbar~as.Date(fechas,"%d/%m/%y"), ylim=c(400,650), type="b",
>> pch=19,cex=1)
>>
>> arrows(x0=as.Date(fechas,"%d/%m/%y"),y0=lci,x1=as.Date(fechas,"%d/%m/%y"),y1=lcs,angle=90,code=3,length=.1)
>>
>> El problema es que la gráfica emitida por R me saca en abscisas una serie
>> de meses que me los coloca por defecto (ver gráfica adjunta) y lo que yo
>> quiero es poner marcas mensuales desde agosto de 2013 hasta mayo 2014,
>> incluido el cambio de año (ya sea dic’13 o ene’14), pero por mucho que lo
>> intento no me sale.
>>
>> ¿Podéis ayudarme?.
>> Muchas gracias por adelantado y un cordial saludo
>>
>> Carlos
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
>
>


-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140909/048a578c/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: Rplot02.png
Type: image/png
Size: 41265 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140909/048a578c/attachment-0001.png>


Más información sobre la lista de distribución R-help-es