2012-02-05 165 views
2

我想創建一個使用因子和兩個以上變量的條形圖!我的數據看起來像這樣:通過ggplot2繪製多個變量

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

每個數據點是李克特項範圍從1-5

繪製使用二分版本總金額(上述4的每一項是1,否則爲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

轉換的數據0

這樣做,我鬆散factor1等提供的信息,我想使用堆疊,以便從哪組人員可視化評分來自

是否有一個優雅的解決方案,以解決這個問題?我讀過關於使用重塑來融化數據,然後應用ggplot?

+0

是的,基本上重塑是你的朋友。你想要一個變量的結果和一個變量與該結果的標籤。 – PaulHurleyuk 2012-02-05 22:03:32

回答

4

我會建議以下幾點:使用你的因素之一進行堆疊,另一個用於刻面。您可以刪除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))

+0

這真的很棒!非常感謝你 – 2012-02-06 15:24:24