R - коробчатая диаграмма с многофакторными метками

Я работаю над попыткой создать коробчатую диаграмму в R-Cran, которая классифицируется по двум различным факторам по оси x. Моя проблема заключается в создании меток для одного фактора с +20 уровнями, соответствующим образом охватывающего весь график, при использовании легенды для маркировки второго фактора, который имеет только 2-3 уровня.

Вот тестовый сценарий, который примерно имитирует мой фактический набор данных:

d<-data.frame(x=rnorm(1500),f1=rep(seq(1:20),75),f2=rep(letters[1:3],500))
# first factor has 20+ levels
d$f1<-factor(d$f1)
# second factor a,b,c
d$f2<-factor(d$f2)

boxplot(x~f2*f1,data=d,col=c("red","blue","green"),frame.plot=TRUE,axes=FALSE)

# y axis is numeric and works fine
yts=pretty(d$x,n=5)
axis(2,yts)

# I know this doesn't work; what I'd like is to spread the factors out 
# so the each group of three(a,b,c) is labeled correctly
axis(1,at=seq(1:20))

# Use the legend to handle the f2 factor labels
legend(1, max(d$x), c("a", "b","c"),fill = c("red", "blue","green"))

Спасибо за любую помощь


person Kerry    schedule 04.05.2012    source источник


Ответы (2)


FWIW, ggplot2 решение:

library(ggplot2)
ggplot(data = d, aes(x = f1, y = x)) + 
  geom_boxplot(aes(fill = f2), width = 0.8) + theme_bw()

введите описание изображения здесь

person Sandy Muspratt    schedule 04.05.2012
comment
Я никогда не думал, что можно тематизировать ggplot сюжеты! Меня всегда отключали от их использования из-за уродливого серого фона. Спасибо, что показали мне это. - person thelatemail; 04.05.2012
comment
@thelatemail, тема оформления позволяет настраивать / изменять практически любой элемент сюжета. - person Sandy Muspratt; 04.05.2012
comment
@thelatemail - см. здесь для обзора тем. - person Chase; 04.05.2012

Если вам нужна метка в середине каждой группы из 3 блоков, попробуйте что-то вроде этого:

axis(1,at=seq(2,60,3),labels=1:20,cex.axis=0.7)

введите описание изображения здесь

В общем, это будет:

groups <- 20
numbox <- 3
total <- groups * numbox
xpoints <- seq(median(1:numbox),total,numbox)
person thelatemail    schedule 04.05.2012
comment
Благодаря вам обоим, именно то, что я искал. - person Kerry; 04.05.2012
comment
@Kerry - Не беспокойся! В этом случае не забудьте проголосовать за нас (стрелка вверх) и выбрать ответ (галочка под стрелками). - person thelatemail; 04.05.2012