\begin{figure*}[b]
    \centering
<<fig=TRUE,height=2>>=
    change <- positions
    change <- change[change$latest,]
    change <- change[change$frm,]
    change <- change[change$evaluator %in% c('CorpusEvaluator', linear_evaluator),]
    change <- melt(change, id.vars=c('project', 'bug_number', 'bug_id', 'evaluator'), measure.vars=c('position'))
    change <- cast(change, project + bug_number + bug_id ~ evaluator)
    change$display_order <- ddply(change, .(project), function(x) data.frame(display_order=order(order(x$CorpusEvaluator, x$bug_number))))$display_order
    change <- melt(data.frame(change), id.vars=c('project', 'display_order'), measure.vars=c('CorpusEvaluator', linear_evaluator))
    change$project <- format_name(change$project)
    change$variable <- format_name(change$variable)
    fig <- ggplot(change, aes(display_order, value, linetype=variable, shape=variable)) +
        geom_point(size=2) +
        scale_shape_manual(values=c('x', NA)) +
        geom_line(size=0.3) +
        scale_linetype_manual(values=c('blank', 'solid')) +
        scale_y_log10() +
        facet_grid(. ~ project, scales='free') +
        labs(x='', y='FRM (Log)') +
        theme(axis.text=element_text(colour='black'),
              axis.text.x=element_text(angle=90),
              axis.title.x=element_blank(),
              legend.position='right',
              legend.title=element_blank(),
              panel.border=element_rect(colour='black', fill=NA),
              panel.margin = unit(0, 'inches'),
              plot.margin = unit(c(0,0,0,0), 'inches')
        )
    print(fig)
@
    \caption{Change in position of FRM using \corpus (lines) and \combined (crosses). Each point on x-axis is a single bug, but position does not correspond to bug ID. It is however consistent: bug 1 for \corpus is the same bug as bug 1 for \combined.}
    \label{fig:change}
\end{figure*}
