Adding text labels to lattice plots with multiple panels
Hi, Thanks for the work around, Dennis. My actual data set has 64 replicates for each factor level combination (rather than the 3 in the example), so the overplotting is quite messy. Any ideas on how to avoid the overplotting? Jeff
On Fri, Apr 8, 2011 at 7:32 PM, Dennis Murphy <djmuser at gmail.com> wrote:
Hi:
After a number of false starts, I finally consulted Deepayan's book and the
example on p. 73, suitably adapted, yielded a solution. Add a variable for
the labels and then...
df$lab <- rep(1:6, each = 3)
bwplot(dv ~ f1 | f2, data = df, ylim = c(0.5, 1),
?panel = function(x, y, ..., subscripts) {
?? lab <- df$lab[subscripts]
?? panel.bwplot(x, y,? ...)
?? panel.text(x, 0.55, labels = lab)
?}
)
If you look closely, you'll see that each label is overplotted three times.
A similar plot in ggplot2? would be
library(ggplot2)
ggplot(df, aes(x = f1, y = dv)) + geom_boxplot() +
??? geom_text(aes(x = as.numeric(f1), lab = lab), y = 0.55, alpha = 0.5) +
??? facet_wrap( ~ f2) + ylim(0.5, 1)
The alpha argument in geom_text() is designed to mitigate the overplotting
effect somewhat.
HTH,
Dennis
On Fri, Apr 8, 2011 at 5:32 AM, Jeff Stevens <stev0175 at googlemail.com>
wrote:
Hi,
I am trying to add text to the bottom of a lattice bwplot with
multiple panels. ?I would like to add a label below each boxplot, but
the labels do not come from the data. ?I've tried the following, code:
f1 <- c(rep(c(rep("a", 3), rep("b", 3), rep("c", 3)), 2))
f2 <- c(rep("A", 9), rep("B", 9))
dv <- c(0.9, 0.8, 0.85, 0.6, 0.65, 0.7, 0.8, 0.85, 0.8, 0.95, 0.85,
0.9, 0.65, 0.7, 0.75, 0.85, 0.9, 0.85)
df <- data.frame(f1, f2, dv)
lab <- c(1, 2, 3, 4, 5, 6)
bwplot(dv ~ f1 | f2, data = df, ylim = c(0.5, 1),
?panel = function(x, y, ...) {
? ?panel.bwplot(x, y, ...)
? ?panel.text(x, 0.55, labels = lab)
?}
)
I have two problems. ?First, the label values are writing over one
another. ?I wrote a horrible hack (below) that fixes that problem, but
I would like to know if there are better/more flexible ways to do
this.
bwplot(dv ~ f1 | f2, data = df, ylim = c(0.5, 1),
?panel = function(x, y, ...) {
? ?x2 <- as.factor(c("a", "b", "c"))
? ?panel.bwplot(x, y, ...)
? ?panel.text(x2, 0.55, labels = lab)
?}
)
Second, when using the horrible hack the first values are repeated in
the second panel. ?How do I display the correct values in the second
panel? ?The subscripts argument seems to do the trick when the labels
come from the data, but how do I get the proper values when the labels
come from outside of the data?
Many thanks,
Jeff
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Jeff Stevens Center for Adaptive Behavior and Cognition Max Planck Institute for Human Development Lentzealle 94 14195 Berlin, Germany