Skip to content

plot(type="h") equivalent in Lattice?

3 messages · Deepayan Sarkar, Maciej Kalisiak

#
I tend to prefer doing graphics in R using the lattice library.  I'm
"porting" some old scripts.  Is there a nice way to get in lattice the
equivalent of the plot(type='h'), which is the high-density
lines/histogram plot in base graphics package?  I tried doing this
with barchart(), but with limited success... the fact that I have
~1000 datapoints/bars causes problems, in that R insists on rendering
a tick/label for each bar, and as far as I can tell the plot doesn't
come out as accurate, due to running together of the bars (at least in
plot(type='h') you are guaranteed that each bar/line is exactly one
pixel wide)...
#
On 8/19/05, Maciej Kalisiak <mkalisiak at gmail.com> wrote:
Yes, all (or most, at least) lattice functions will do that if the
variable is a factor or shingle (which barchart forces).
Your best bet is to coerce to numeric, and use xyplot, whose default
panel function honors type='h'. e.g.

xyplot(yield ~ as.numeric(variety) | site + year, 
       data = barley, type = 'h')

or for horizontal bars, 

xyplot(as.numeric(variety) ~ yield | site + year, 
       data = barley, type = 'h', horizontal = TRUE)

Had too many labels not been a problem, you could also have used

barchart(as.numeric(variety) ~ yield | site + year, 
         data = barley, panel = panel.xyplot, type = 'h')

Deepayan
1 day later
#
Ah, great, thanks.  I've actually ran into it just before I saw your
posting, purely by accident, when I happened to look at the source for
panel.xyplot while looking for something else, and noticed the "type"
argument, and in particular the handling of type='h'... I didn't
realize plot(type='h'...) makes use of plot.xy(), otherwise the
plot.xy(graphics)->xyplot(lattice) move would have been obvious...