PepitoDeMallorca
PepitoDeMallorca

Reputation: 68

How to create a bwplot with date on x-axis

users

thanks to the reply of @McQueenDon on r-nabble
http://r.789695.n4.nabble.com/boxplot-with-x-axis-time-td4686787.html#a4687746

I managed to produce a boxplot::base of a single variable with the x-axis correctly formatted and spaced for the date of acquisition.

What if I would like to produce it with bwplot::lattice? I need this because I would like also to use a conditional factor.

Here you are a reproducible example (thanks again to @McQueenDon )

data(iris) 
pippo= stack(iris[,-5]) 
pippo$date= rep(c("2013/01/29", "2013/03/01", "2013/11/01", 
              "2013/12/01", "2014/02/01", "2014/07/02"), 100) 
pippo$date= as.Date(pippo$date) 
boxplot(pippo$values ~ pippo$date) ## NOT exactly what I want 

bx<- boxplot(pippo$values ~ pippo$date, plot= F) 
bxp(bx, at=sort(unique(pippo$date))) # this is what I was looking for ! 

require(lattice) 
bwplot(values~date, pippo, horizontal=F) #dates looks not correctly spaced even though they are correctly ordered and formatted 
# finally I would like to condition to the 'ind' variable 
bwplot(values~date| ind, pippo, horizontal=F, layout= c(2,2)) 

Thanks

Giuseppe

Upvotes: 1

Views: 648

Answers (1)

MrFlick
MrFlick

Reputation: 206207

How about

xyplot(values~date| ind, pippo, horizontal=F, layout= c(2,2), 
    panel=panel.bwplot, box.width=20) 

enter image description here

Here we use xyplot with a custom panel= parameter rather than bwplot because bwplot converts the x to a factor first which renumbers all the levels with sequential integers; xyplot does not do this.

If you wanted to label the exact dates, you could try

dts<-unique(pippo$date)
xyplot(values~date| ind, pippo, horizontal=F, layout= c(2,2), 
    panel=panel.bwplot, box.width=20,
    scales=list(x=list(at=dts)))

but that looks quote crowded in this particular example.

Upvotes: 2

Related Questions