1

Okay, this is going to go pretty long but the basic summary of what I'm trying to do is to combine (at least the essence / not necessarily a literal combining) a chart that I've created using ggplot2 with a control chart I created using qicharts.

So to begin with, here's the basic structure of the data I'm using for the charts. (Reproducible data at the bottom)

| FileName | Version | Category  | Value | TestNum | RepNum | Case  |
|----------|---------|-----------|-------|---------|--------|-------|
| File1    | 1.0.1   | Category1 |   100 |       1 |      1 | Case1 |
| File1    | 1.0.1   | Category2 |   200 |       1 |      1 | Case1 |
| File1    | 1.0.1   | Category1 |   101 |       1 |      2 | Case1 |
| File1    | 1.0.1   | Category2 |   199 |       1 |      2 | Case1 |
| File2    | 1.0.1   | Category1 |    50 |       1 |      1 | Case1 |
| File2    | 1.0.1   | Category2 |    75 |       1 |      1 | Case1 |
| File2    | 1.0.1   | Category1 |    53 |       1 |      2 | Case1 |
| File2    | 1.0.1   | Category2 |    80 |       1 |      2 | Case1 |

*In the actual dataset, the TestNum keeps counting up along with the next version and there are multiple "Cases". See reproducable example below

Here's how the ggplot2 chart is created:

versions<-unique(df[order(df$TestNum), ][,2])
df$Version<-factor(df$Version, levels = versions)

g <- ggplot(subset(df, FileName=="File1" & Case=="Case1"), aes(x=Version, y=Value, group=FileName))
g <- g + geom_line(size=.25) + geom_point(size=1.2, colour='red') +
  ggtitle(expression(atop("TITLE", atop(italic("SUBTITLE"), "")))) +
  facet_grid(Category ~ ., scales="free", space="fixed", labeller=label_value) +
  xlab("version") + ylab("Metric Value") +
  expand_limits(y=0) +
  theme(axis.text.x=element_text(angle=45, vjust=1, hjust=1)) + 
  theme(axis.title.y=element_text(vjust=1)) + 
  theme(plot.margin=unit(c(0,0,0,0),"mm"))
g

and it looks like this: ggplot2 chart

And here's how the control chart is generated:

subdf <- subset(df, FileName=="File1" & Category=="Category1")

qic(Value, 
    x = Version,
    data = subdf,
    chart = 'c',
    main = 'File1 - Category1',
    ylab = 'Category1',
    xlab = 'Version')

and it looks like this: cchart

What I'd really like to do though is to add the control chart lines to the facets of the original ggplot2 chart. Right now, I'll have to have many times the number of figures to have a control chart for every category when I could bundle them into one figure for each file instead.

DATASET HERE

It's rather large to show everything that needs to be considered

FileName <- c("File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File1", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2", "File2")
Version <- c("1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.1", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.2", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3", "1.0.3")
Category <- c("Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3","Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3", "Category1", "Category1", "Category1", "Category2", "Category2", "Category2", "Category3", "Category3", "Category3")
Value <- c(194,194,194,17,17,17,355,355,355,194,194,194,16,16,16,373,373,373,160,160,160,17,17,17,355,355,355,160,160,160,16,16,16,373,373,373,160,160,160,17,17,17,355,355,355,160,160,160,16,16,16,373,373,373,1918,1918,1918,17,17,17,355,355,355,1918,1918,1918,16,16,16,373,373,373,1918,1918,1918,17,17,17,355,355,355,1918,1918,1918,16,16,16,373,373,373,1918,1918,1918,17,17,17,355,355,355,1918,1918,1918,16,16,16,373,373,373)
TestNum <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
RepNum <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
Case <- c("Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case1", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2", "Case2")
df <- data.frame(FileName,Version,Category,Value,TestNum,RepNum,Case)

Load this before the chart code and you should be able to reproduce all of these figures. Sorry if it's a bit brutish but I wasn't sure how to accomplish the patterns in a simpler way. (Maybe that's a question for another day.)

Neal
  • 199
  • 3
  • 16

1 Answers1

0

qicharts2 can handle the faceting for you, simply use the "facets" argument within the qic function. Also note that the package now uses ggplot2 so you can amend graphics with additional ggplot2 commands.

Using your original df, you can try

qic(Value, 
x = Version,
data = df,
facets = FileName ~ Category,
chart = 'c',
main = 'File by Category',
ylab = 'Category1',
xlab = 'Version')

Haven't tested fully, (on my tablet) but this should give you an idea. The original qicharts package used grouping arguments to create facets (g1 and g2), the new version is more intuitive.

See my answer control charts ggplot2 and facet wrap for additional examples

johnm
  • 170
  • 3
  • 9