2013-08-12 2 views
1

Я пытаюсь создать гистограмму с решеткой, которая имеет две группы. Первая группировка складывается, а вторая - нет. Например:Как создать многомерный бархат

a <- factor(rep(c(1,2), times = 6)) 
b <- factor(rep(c(1,2,3), times = 4)) 
c <- factor(rep(c(1,2,3,4), times = 3)) 
d <- factor(rep(c("true", "false"), each = 6)) 
e <- factor(rep(c("yes", "no", "may be"), each = 4)) 
value <- c(5,8,2,4,1,8,9,3,5,6,3,12) 

На данный момент я делаю следующее:

a <- factor(rep(c(1,2), times = 6)) 
b <- factor(rep(c(1,2,3), times = 4)) 
c <- factor(rep(c(1,2,3,4), times = 3)) 
d <- factor(rep(c("true", "false"), each = 6)) 
e <- factor(rep(c("yes", "no", "may be"), each = 4)) 
value <- c(5,8,2,4,1,8,9,3,5,6,3,12) 

barchart(value ~ a | b + c, 
     groups = d, stack = FALSE, 
     auto.key=TRUE, 
     scales = list(x = "free")) 

Это приводит к длине (б) * длина (с) множество barplots, каждый с длиной (а) наборы баров. Каждый набор баров имеет панель для «истинного» и бар для «ложных». То, что я хотел бы добавить, - это уложенное значение e, так что каждая «истинная» панель будет разделена на три части: нижняя будет для «да», затем «нет» и «может быть», и то же самое с «ложным» баром.

Я понимаю, что график будет довольно сложным, однако это лучший способ представить данные, которые у меня есть. Добавление e в формулу, как и в b + c + e, не является опцией, так как у меня уже есть набор графиков, и мне нужно придерживаться того же формата, поскольку они связаны друг с другом. С другой стороны, наличие 6 баров в каждом наборе сделает читаемость намного сложнее.

Спасибо!

+0

Это дает мне сюжет только с одним значением д (то есть, истинным или ложным, но не оба) на грань. Это намеренно? –

ответ

1

ggplot2 будет делать работу относительно легко, если использование lattice не является трудным требованием для вас. Я позволил расширить ваш набор данных, чтобы присутствовали все комбинации a, b, c, d и e.

# Load required packages 
require(ggplot2) 
require(plyr) 

# Make factors with the same levels as in the original post 
# but 100x longer, and in random order so all combinations are present 
a <- sample(factor(rep(c(1,2), times = 600))) 
b <- sample(factor(rep(c(1,2,3), times = 400))) 
c <- sample(factor(rep(c(1,2,3,4), times = 300))) 
d <- sample(factor(rep(c("true", "false"), each = 600))) 
e <- sample(factor(rep(c("yes", "no", "may be"), each = 400))) 
value <- runif(1200) 

# Put them in a data frame 
df <- data.frame(a=a, b=b, c=c, d=d, e=e, value=value) 

# Calculate the sum of the value columns for each unique combination of a, b, c, d, and e 
# I think this is what you'd like - am not totally sure 
ds <- ddply(df, c("a", "b", "c", "d", "e"), summarise, sum.value=sum(value, na.omit=TRUE)) 

# Make the plot 
ggplot(ds, aes(x=d, y=sum.value, fill=e)) + geom_bar(stat="identity") + 
    facet_grid(a~b+c) + 
    theme(axis.text.x=element_text(angle=-90)) 

enter image description here

+0

Я никогда раньше не использовал ggplot2, но это похоже на то, что мне нужно. Огромное спасибо! :) – Tania

+0

В ggplot2 есть немного кривой обучения, но это не должно быть слишком плохо, если вы привыкли к решетке, и я думаю, что это в конечном счете облегчает множество задач. –

Смежные вопросы