[R] different x-axes in Lattice

Deepayan Sarkar deepayan.sarkar at gmail.com
Thu Jan 28 12:34:11 CET 2010

On Sun, Jan 24, 2010 at 5:24 AM, Robert Ruser <robert.ruser at gmail.com> wrote:
> I use lattice package and 'barchart' to build a chart. I have a
> problem with setting different x-axes. Some x categories are missing
> but they are display and I don't want. I use scales = list(y =
> "free",x="free") but it works only for y-axes. Simple example:
> package(lattice)
> barchart(yield ~ variety | site, data = barley,
>        groups = year, layout = c(1,6),
>        scales = list(y = "free",x="free"),
>        auto.key=list(rectangles = TRUE, space = "bottom"),
>        )
> Let's assume that in the first panel  'Waseca'  the category 'Velvet'
> are not available in data but in the chart there is a empty place. If
> more categories are not available it looks bad. Simple modification to
> illustrate my problem:
> barley2 <- barley[barley[,2]!="Velvet" | barley[,4]!="Waseca",]
> barchart(yield ~ variety | site, data = barley2,
>        groups = year, layout = c(1,6),
>        scales = list(y = "free",x="free"),
>        auto.key=list(rectangles = TRUE, space = "bottom"),
>        )

The short answer is that empty factor levels will be omitted only if
they are at the boundary (because what are actually plotted on the
x-axis here are the numeric factor codes). For example,

barchart(yield ~ reorder(variety, yield, length) | site, data = barley2,
       groups = year, layout = c(1,6),
       scales = list(y = "free",x="free"))

If you want to omit levels in the middle, you need to actually change
the internal codes using 'x[drop=TRUE]' where 'x' is your factor with
the missing levels. Lattice has no built-in facility to do that, but
you can do it yourself in custom prepanel and panel functions.


More information about the R-help mailing list