如何在R中创建(100%)堆积直方图?

时间:2012-01-06 12:16:19

标签: r plot ggplot2 histogram

我的数据集:

我有以下格式的数据(此处,从CSV文件导入)。您可以将示例数据集找到CSV here

PAIR   PREFERENCE
1      5
1      3
1      2
2      4
2      1
2      3

......等等。总共有19对,PREFERENCE范围从15,作为离散值。


我想要实现的目标:

我需要的是堆叠直方图,例如每对都有一个100%高的列,表示PREFERENCE值的分布。

类似于Excel中的“100%堆积列”,或者(尽管不完全相同,所谓的“马赛克图”):


我尝试了什么:

我认为使用ggplot2最简单,但我甚至不知道从哪里开始。我知道我可以用以下内容创建一个简单的条形图:

ggplot(d, aes(x=factor(PAIR), y=factor(PREFERENCE))) + geom_bar(position="fill")

......然而,这并没有让我走得太远。所以我尝试了这个,它让我更接近我想要实现的目标,但我认为它仍然使用PREFERENCE的计数?请注意此处ylab为“count”,值为19。

qplot(factor(PAIR), data=d, geom="bar", fill=factor(PREFERENCE_FIXED))

结果:

enter image description here

  • 那么,我需要做些什么才能让叠加的条形图代表直方图?
  • 或者他们实际上已经这样做了吗?
  • 如果是这样,我需要更改什么才能使标签正确(例如,有百分比而不是“计数”)?

顺便说一句,这与this question没有关系,只与this略有关系(即可能是相同的想法,但不是连续的值,而是分为条形)。< /子>

1 个答案:

答案 0 :(得分:9)

也许你想要这样的东西:

ggplot() + 
    geom_bar(data = dat,
             aes(x = factor(PAIR),fill = factor(PREFERENCE)),
             position = "fill")

我已将您的数据读入dat。这输出如下:

enter image description here

y标签仍为“count”,但您可以通过添加以下内容手动更改:

+ scale_x_discrete("Pairs") + scale_y_continuous("Votes")