Построение нескольких переменных через ggplot2 - PullRequest
2 голосов
/ 06 февраля 2012

Я хотел бы создать гистограмму, используя факторы и более двух переменных! Мои данные выглядят так:

     Var1 Var2 ... VarN Factor1 Factor2
Obs1  1-5 1-5  ... 1-5     
Obs2  1-5 1-5  ... ...
Obs3  ... ...  ... ...

Каждая точка данных - это элемент likert в диапазоне от 1-5

Построение итоговых сумм с использованием дихотомической версии (каждый элемент выше 4 - один, иначе 0)

Я конвертировал данные, используя

MyDataFrame = dichotomize(MyDataFrame,>=4)
p <- colSums(MyDataFrame)
p <- data.frame(names(p),p)
names(p) <- c("var","value")
ggplot(p,aes(var,value)) + geom_bar() + coord_flip()

enter image description here

Делая это, я теряю информацию, предоставленную factor1 и т. Д., Я хотел бы использовать стекирование, чтобы визуализировать, из какой группы людей пришел рейтинг

Есть ли элегантное решение этой проблемы? Я читал об использовании Reshape, чтобы растопить данные, а затем применить ggplot?

1 Ответ

4 голосов
/ 06 февраля 2012

Я бы предложил следующее: используйте один из ваших факторов для суммирования, а другой - для огранки.Вы можете удалить от position="fill" до geom_bar(), чтобы использовать счетчики вместо стандартизированных значений.

my.df <- data.frame(replicate(10, sample(1:5, 100, rep=TRUE)), 
                    F1=gl(4, 5, 100, labels=letters[1:4]), 
                    F2=gl(2, 50, labels=c("+","-")))
my.df[,1:10] <- apply(my.df[,1:10], 2, function(x) ifelse(x>4, 1, 0))
library(reshape2)
my.df.melt <- melt(my.df)
library(plyr)
res <- ddply(my.df.melt, c("F1","F2","variable"), summarize, sum=sum(value))
library(ggplot2)
ggplot(res, aes(y=sum, x=variable, fill=F1)) +
   geom_bar(stat="identity", position="fill") + 
   coord_flip() +
   facet_grid(. ~ F2) + 
   ylab("Percent") + xlab("Item")

enter image description here

На изображении выше я показал наблюдаемые частоты '1' (значение выше 4 по шкале Лайкерта) для каждой комбинации F1 (четыре уровня) и F2 (два уровня), где имеется 10 или 15 наблюдений:

> xtabs(~ F1 + F2, data=my.df)
   F2
F1   +  -
  a 15 10
  b 15 10
  c 10 15
  d 10 15

Затем я вычислил сумму суммы условного элемента сddply, с использованием «расплавленной» версии исходного data.frame.Я полагаю, что остальные графические команды легко настраиваются в зависимости от того, какую информацию вы хотите отобразить.

В этом упрощенном случае инструкция ddply эквивалентнаwith(my.df.melt, aggregate(value, list(F1=F1, F2=F2, variable=variable), sum)).

...