Бокплоты ранжируются по среднему значению - PullRequest
3 голосов
/ 26 марта 2012

Я хотел бы показать коробочные диаграммы для нескольких переменных и ранжировать их по столбцам в порядке убывания, как в пакете Performance Analytics . Я использую следующий код для создания коробочных графиков:

zx <- replicate (5, rnorm(50))
zx_means <- (colMeans(zx, na.rm = TRUE))
boxplot(zx, horizontal = FALSE, outline = FALSE)
points(zx_means, pch = 22, col = "darkgrey", lwd = 7)

До сих пор я не смог придумать способ их ранжировать, как описано выше. Я попытался использовать оба порядка sort и order , но пока без каких-либо удовлетворительных результатов.

Любая помощь будет высоко ценится.

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Использование ggplot2 позволяет выполнить работу, используя данные вашего примера:

library(ggplot2)
library(reshape)

zx <- replicate (5, rnorm(50))

# ggplot2 uses long-shaped data.frame's, not matrices
zx_flat = melt(zx)[c(2,3)]
names(zx_flat) = c("cat","value")

# Here I calculate the mean per category
zx_flat = ddply(zx_flat, .(cat), mutate, mn = mean(value))
zx_flat = sort_df(zx_flat, "mn") # Order according to mean
# Here I manually set the order of the levels
# as this is the order ggplot2 uses
zx_flat$cat = factor(zx_flat$cat, levels = unique(zx_flat$mn))

# make the plot
ggplot(aes(factor(mn), value), data = zx_flat) + geom_boxplot()

и мы получаем:

enter image description here

3 голосов
/ 26 марта 2012

order у меня отлично работает!?:

colnames (zx) <- seq_len (ncol (zx))
boxplot(zx [, order (zx_means)], horizontal = FALSE, outline = FALSE)
points(zx_means [ order (zx_means)], pch = 22, col = "darkgrey", lwd = 7)
...