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

slh*_*hck 7 plot r histogram ggplot2

我的数据集:

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

PAIR   PREFERENCE
1      5
1      3
1      2
2      4
2      1
2      3
Run Code Online (Sandbox Code Playgroud)

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


我想要实现的目标:

我需要的是每对的堆叠直方图,例如100%高的列,指示PREFERENCE值的分布.

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


我尝试了什么:

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

ggplot(d, aes(x=factor(PAIR), y=factor(PREFERENCE))) + geom_bar(position="fill")
Run Code Online (Sandbox Code Playgroud)

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

qplot(factor(PAIR), data=d, geom="bar", fill=factor(PREFERENCE_FIXED))
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述

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

顺便说一句,这与这个问题并没有真正的关系,只是与略有关系(即可能是相同的想法,但不是连续的值,而是分为条形).

jor*_*ran 10

也许你想要这样的东西:

ggplot() + 
    geom_bar(data = dat,
             aes(x = factor(PAIR),fill = factor(PREFERENCE)),
             position = "fill")
Run Code Online (Sandbox Code Playgroud)

我把你的数据读进去的地方dat.这输出如下:

在此输入图像描述

y标签仍然是"count",但您可以通过添加以下内容手动更改:

+ scale_x_discrete("Pairs") + scale_y_continuous("Votes")
Run Code Online (Sandbox Code Playgroud)

  • ......或者只是`labs(x ="Pairs",y ="Votes")`. (4认同)