ggplot2条形图中的有序因子

时间:2010-09-01 21:52:26

标签: r ggplot2

我有一个数据框,用于(简化)评委,电影和评级(评级为1星到5星级):

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轴上的顺序正确?

1 个答案:

答案 0 :(得分: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()

并通过调整geom_bar中的默认binwidth,我们可以使条形宽度更合适,并将评级作为一个因素将其置于标签的中心位置:

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