Запуск приложения без формы означает, что Вы оказываетесь перед необходимостью справляться, приложение запускают/завершают работу себя.
Начинание невидимой формы является более оптимальным вариантом.
Полосы в ggplot2 упорядочены по порядку уровней в факторе.
val$State <- with(val, factor(val$State, levels=val[order(-Value), ]$State))
Подмножество и сортировка данных;
valact <- subset(val, variable=='actual')
valsort <- valact[ order(-valact[,"Value"]),]
Оттуда это просто стандартный boxplot ()
с очень ручной кумулятивной функцией вверху:
op <- par(mar=c(3,3,3,3))
bp <- barplot(valsort [ , "Value"], ylab="", xlab="", ylim=c(0,1),
names.arg=as.character(valsort[,"State"]), main="How's that?")
lines(bp, cumsum(valsort[,"Value"])/sum(valsort[,"Value"]),
ylim=c(0,1.05), col='red')
axis(4)
box()
par(op)
, которая должна выглядеть так это
(источник: eddelbuettel.com )
, и здесь даже не требуется трюк с наложением графика, поскольку lines ()
с радостью аннотирует исходный график.
Также см. Пакет qcc , в котором есть функция pareto.chart ()
. Похоже, в нем тоже используется базовая графика, так что начните награду за решение ggplot2: -)
На простом примере:
> data
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10
0.29056 0.23833 0.11003 0.05549 0.04678 0.03788 0.02770 0.02323 0.02211 0.01925
barplot(data)
делает все правильно
эквивалент ggplot "должен быть": qplot(x=names(data), y=data, geom='bar')
Но это неправильно упорядочивает/сортирует столбики по алфавиту... потому что именно так levels(factor(names(data)))
будут упорядочены.
Решение: qplot(x=factor(names(data), levels=names(data)), y=data, geom='bar')
Фух!