2010-09-01 80 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