Skip to content

different x-axes in Lattice

3 messages · Robert Ruser, Peter Ehlers, Deepayan Sarkar

#
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"),
        )


Robert
#
If I understand you correctly, then what you propose makes
very little sense to me. In your barley2 example, I certainly
would want to see the empty space for 'Velvet'. If you want a
separate plot for each site, with no common 'variety' axis,
then just build separate plots. Of course you would lose the
ability to easily scan the vertical direction to compare
varieties at different sites.

  -Peter Ehlers
Robert Ruser wrote:

  
    
3 days later
#
On Sun, Jan 24, 2010 at 5:24 AM, Robert Ruser <robert.ruser at gmail.com> wrote:
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.

-Deepayan