[R] Need some quick help with lattice - barchart

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Thu May 5 20:44:11 CEST 2005



Ghosh, Sandeep wrote on 5/5/2005 11:10 AM:
> For the following code below, the x-axis ticks are 1,2,3,4,5,6,7 when I was expection them to be 1,2,8,9,10,11,12. Please help me figure out where is the mistake.
> 
> 
> library(lattice)
> 
> testdata <- as.data.frame(t(structure(c(
> 1,2005,9.24,6.18,634,
> 2,2005,8.65,6.05,96,
> 8,2004,6.81,6.51,16,
> 9,2004,9.0,7.29,8,
> 10,2004,8.84,6.18,524,
> 11,2004,8.54,6.35,579,
> 12,2004,9.97,6.3,614,
> 12,2005,8.75,5.84,32,
> ), .Dim=c(5,8))))
> 
> colnames(testdata) <- c('month', 'year', 'mean','stdDev','miceCount')
> testdata$month <- as.numeric(testdata$month)
> testdata$year <- factor(testdata$year)
> testdata <- testdata[do.call("order", testdata), ]
> 
> png('lexstar_3241.png', width=600, height=as.numeric(length(levels(testdata$year))*200), pointsize=8)
> trellis.par.set(theme = col.whitebg())
> 
> with(testdata, print(barchart(as.numeric(mean) ~ month | year, data=testdata, 
>     layout=c(1,length(levels(year))), 
>     horizontal=FALSE, 
>     scales=list(y=list(limits=c(1,max(as.numeric(mean))+max(as.numeric(stdDev))))),
>     main='Marble Burying - Level I',
>     xlab='Months',
>     ylab='Mean',
>     sd = as.numeric(as.character(stdDev)),
>     panel= function(x, y, ..., sd, subscripts) {
> 		panel.barchart(x, y, ...);
> 		sd <- sd[subscripts];
> 		panel.segments(as.numeric(x), y - sd, as.numeric(x), y + sd, col = 'red', lwd = 2);
> 	   }
> )))
> 
> dev.off()
> 
> Any help is greatly appreciated...
> 
> Thanks,
> Sandeep
> 
> 	[[alternative HTML version deleted]]

Hi Sandeep,

First, you are overusing as.numeric and as.character. Is there a reason 
for this that the example doesn't demonstrate.

Second, scales$y$limits is the same as setting ylim. The latter is more 
readable in my opinion.

As to your actual question, you should supply a scales argument for the 
x-axis. Below is what I came up with:

barchart(mean ~ month | year, data = testdata,
          layout = c(1, nlevels(testdata$year)),
          horizontal = FALSE,
          ylim = c(1, max(testdata$mean) + max(testdata$stdDev)),
          main = 'Marble Burying - Level I',
          xlab = 'Months',
          ylab = 'Mean',
          sd = testdata$stdDev,
          scales = list(x = list(at = 1:7,
                          labels = unique(sort(testdata$month)))),
          panel = function(x, y, ..., sd, subscripts) {
            panel.barchart(x, y, ...)
            sd <- sd[subscripts]
            panel.segments(x, y - sd, x, y + sd, col = 'red', lwd = 2)
          })


HTH,

--sundar




More information about the R-help mailing list