2010-09-01 83 views
3

我有一個數據幀(爲了簡化)判斷,電影,和評分(評分是在1星到5星標):有序因素GGPLOT2條形圖

d = data.frame(judge=c("alice","bob","alice"), movie=c("toy story", "inception", "inception"), rating=c(1,3,5)) 

我想創建一個條形圖,其中X軸是星星的數量,每個條形的高度是該星形的收視率。

如果我做

ggplot(d, aes(rating)) + geom_bar() 

這工作得很好,除了酒吧不超過各自的評價中心和各條的寬度並不理想。

如果我做

ggplot(d, aes(factor(rating))) + geom_bar() 

顆數的順序得到的x軸搞砸了。 (我的Mac上,至少,由於某種原因,默認的排序工作在Windows機器上。)這裏是什麼樣子: alt text

我試圖

ggplot(d, aes(factor(rating, ordered=T, levels=-3:3))) + geom_bar() 

,但這似乎並沒有不幫幫我。

如何讓我的條形圖看起來像上面的圖片,但在x軸上有正確的順序?

回答

4

我不確定您的示例數據框是否代表您放置的圖像。你提到你的評分是1-5分,但你的圖片顯示-3到3分。隨着中說,我認爲這應該讓你在正確的方向前進:

的樣本數據:

d = data.frame(judge=sample(c("alice","bob","tony"), 100, replace = TRUE) 
    , movie=sample(c("toy story", "inception", "a league of their own"), 100, replace = TRUE) 
    , rating = sample(1:5, 100, replace = TRUE)) 

您最近與此有:

ggplot(d, aes(rating)) + geom_bar() 

,並通過調整默認binwidth geom_bar我們可以使條寬更爲合適,並將處理等級作爲以標籤爲中心的因素:

ggplot(d, aes(x = factor(rating))) + geom_bar(binwidth = 1) 

alt text

如果要納入圖表中的其他變量之一,如電影,你可以使用填充:

ggplot(d, aes(x = factor(rating), fill = factor(movie))) + geom_bar(binwidth = 1) 

alt text

這可能更有意義,把在x軸上的電影並填寫評級,如果您有少量電影進行比較:

ggplot(d, aes(x = factor(movie), fill = factor(rating))) + geom_bar(binwidth = 1) 

如果這樣做不能讓你繼續前進,那麼請提供一個更具代表性的數據集示例。我無法重新創建訂購問題,但這可能是由於您發佈的樣本數據和您正在分析的數據存在差異。

ggplot網站也是一個很好的參考:http://had.co.nz/ggplot2/geom_bar.html