【问题标题】:ordered factors in ggplot2 bar chartggplot2条形图中的有序因子
【发布时间】:2010-09-01 21:52:26
【问题描述】:

我有一个包含(为了简化)评委、电影和评级的数据框(评级从 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 机器上有效。)这是它的样子:

我试过了

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

但这似乎没有帮助。

如何让我的条形图看起来像上图,但 x 轴上的顺序正确?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我不确定您的示例数据框是否能代表您发布的图片。您提到您的评分为 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)
    

    如果您想在图表中合并其他变量之一,例如电影,您可以使用填充:

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

    如果要比较的电影数量较少,将电影放在 x 轴上并填写评分可能更有意义:

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

    如果这不能让您顺利上路,请为您的数据集提供更具代表性的示例。我无法重新创建排序问题,但这可能是由于您发布的示例数据和您正在分析的数据存在差异。

    ggplot 网站也是一个很好的参考:http://had.co.nz/ggplot2/geom_bar.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-31
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多