user257122
user257122

Reputation: 51

How to plot barchart with error bar and dots using lattice?

I am trying to plot bar chart with errorbar and dots representing single data value using lattice, what I expected is the figure like this from this page. However, lattice outputs wrongs after I tried to use panel.barchart combind with panel.xyplot:

barchart(len ~ dose + supp,
  data = ToothGrowth,
  panel = function(x, y, ...) {
    panel.barchart(x, y, ...)
    panel.xyplot(..., jitter.x = TRUE)
    panel.segments(x0 = x, y0 = y-0.5, x1 = x, y1 = y+0.5)
}

I would like to know can lattice do this job, and if can, how to do this?

Thanks for any help!

Upvotes: 1

Views: 119

Answers (1)

Deepayan Sarkar
Deepayan Sarkar

Reputation: 196

Calling this a barchart is misleading, it's more like a strip plot with a confidence interval. Here's one possible implementation:

panel.ci <- function(x, y, col.symbol, ...)
{
    col <- col.symbol
    ## points
    panel.points(jitter(x, amount = 0.2), y,
                 col = col, pch = 16, cex = 1.5, alpha = 0.5)
    ## summaries
    m <- tapply(y, x, mean)
    s <- tapply(y, x, sd) / sqrt(tapply(y, x, length))
    ## 'bars'
    ux <- sort(unique(x))
    w <- 0.45 # rectangle half-width
    panel.rect(ux - w, 0, ux + w, m, border = col, lwd = 2)
    ## confidence interval
    panel.arrows(ux, m - 1.96 * s, ux, m + 1.96 * s, col = col,
                 length = 0.1, angle = 90, code = 3, lwd = 2)
}
xyplot(len ~ supp | factor(dose), data = ToothGrowth, groups = supp,
       layout = c(3, 1), ylim = c(-1, NA), pch = 16, col = 2:3,
       panel = panel.superpose, panel.groups = panel.ci)

Upvotes: 2

Related Questions