7

I have been using the pareto.chart function from the qcc package in R and I really like it. Now I would like to port all my graphics to utilize the ggplot2 package instead. However, my knowledge of ggplot2 is very limited despite the excellent documentation so I cannot figure out all the details. Basically I want a plot looking like this

A simple pareto chart made by the pareto.chart function in the qcc package

but made with the ggplot2 package instead. The code for producing the plot is listed below:

    library(qcc)
    defect <- c(80, 27, 66, 94, 33)
    names(defect) <- c("price code", "schedule date", "supplier code", "contact num.", "part num.")
    pareto.chart(defect, ylab = "Error frequency", col=heat.colors(length(defect)))

Does anyone have a solution for this? The pareto chart has been discussed before here but the result does not look anything similar to what I want.

Community
  • 1
  • 1
Dr. Mike
  • 2,451
  • 4
  • 24
  • 36

1 Answers1

9

Here you go:

library(ggplot2)

counts  <- c(80, 27, 66, 94, 33)
defects <- c("price code", "schedule date", "supplier code", "contact num.", "part num.")

dat <- data.frame(
  count = counts,
  defect = defects,
  stringsAsFactors=FALSE
)

dat <- dat[order(dat$count, decreasing=TRUE), ]
dat$defect <- factor(dat$defect, levels=dat$defect)
dat$cum <- cumsum(dat$count)
dat

ggplot(dat, aes(x=defect)) +
  geom_bar(aes(y=count), fill="blue", stat="identity") +
  geom_point(aes(y=cum)) +
  geom_path(aes(y=cum, group=1))

enter image description here

Andrie
  • 176,377
  • 47
  • 447
  • 496
  • Great, thank you Andrie. Do you also know how I might be able to extend your solution to add the right y-axes as well? I'm referring to the "Cumulative Percentage" axes. – Dr. Mike Apr 13 '12 at 11:04
  • `ggplot` doesn't support adding a second y-axis, for very sound theoretical reasons. – Andrie Apr 13 '12 at 12:54