Как я могу создать (100%) гистограмму в R? - PullRequest
7 голосов
/ 06 января 2012

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

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

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

… и так далее.Всего существует 19 пар, и PREFERENCE варьируется от 1 до 5 в качестве дискретных значений.


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

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

Что-то похожее на «столбцы с накоплением 100%» в Excel, или (хотя и не совсем то же самое, так называемый «мозаичный сюжет»):

image


What I tried:

I figured it'd be easiest using ggplot2, but I don't even know where to start. I know I can create a simple bar chart with something like:

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

… that however doesn't get me very far. So I tried this, and it gets me somewhat closer to what I'm trying to achieve, but it still uses the count of PREFERENCE, I suppose? Note the ylab being "count" here, and the values ranging to 19.

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

Results in:

enter image description here

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

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

1 Ответ

10 голосов
/ 06 января 2012

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

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

где я прочитал ваши данные в dat. Это выводит что-то вроде этого:

enter image description here

Метка y по-прежнему "считать", но вы можете изменить это вручную, добавив:

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