Как создать (100%) сложенную гистограмму в R?

мой набор данных:

у меня есть данные в следующем формате (здесь импортировать из csv-файла). Вы можете найти пример набора данных как CSV здесь.

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

... и так далее. В общем, есть 19 пар, а PREFERENCE составляет от 1 до 5, как дискретные значения.


чего я пытаюсь достичь:

мне нужна гистограмма с накоплением, например, столбец 100% high, для каждой пары, указывающий распределение PREFERENCE значения.

что-то похожее на "100% многоярусные колонны" в Excel, или (хотя и не совсем то же самое, так называемый "мозаичный сюжет"):


что я пробовал:

я подумал, что проще всего использовать 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

  • Итак, что мне нужно сделать, чтобы сложенные бары представляли гистограмму?
  • или они уже это делают?
  • если да, то что мне нужно изменить, чтобы получить правильные метки (например, проценты вместо "подсчета")?

кстати, это на самом деле не связано с этот вопрос, и только незначительно связаны с этой (т. е., вероятно, та же идея, но не непрерывные значения, вместо этого сгруппированные в бары).

1 ответов


может быть, вы хотите что-то вроде этого:

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")