2010-09-01 2 views
3

У меня есть фрейм данных с (для упрощения) судей, фильмов и рейтинги (рейтинги на 1 звезда 5 звезд масштаба):заказанные факторы в гистограмме ggplot2

d = data.frame(judge=c("alice","bob","alice"), movie=c("toy story", "inception", "inception"), rating=c(1,3,5)) 

Я хочу, чтобы создать гистограмма, где ось х - это количество звезд, а высота каждого бара - это количество рейтингов этой звезды.

Если я

ggplot(d, aes(rating)) + geom_bar() 

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

Если я

ggplot(d, aes(factor(rating))) + geom_bar() 

то порядок числа звезд испортится на оси х. (На моем Mac, по крайней мере, по какой-то причине, упорядочение по умолчанию работает на компьютере Windows.) Вот как это выглядит: alt text

Я попытался

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

, но это, кажется, не Помогите.

Как я могу получить свою гистограмму, как показано на рисунке выше, но с правильным упорядочением по оси х?

ответ

4

Я не уверен, что ваш образец данных является репрезентативным для изображений, которые вы размещаете. Вы упомянули, что ваши рейтинги относятся к шкале 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() 

и корректировки binwidth по умолчанию в geom_bar мы можем сделать ширину полосы более подходящей и обрабатывать оценку, поскольку фактор центрирует их по этикетке:

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

alt text

Если вы хотите, чтобы включить одну из других переменных в таблице, такие как кино, вы можете использовать заливку:

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

alt text

Это может сделать больше смысла ставить фильмы на оси х и заполните оценку, если у вас есть небольшое количество фильмов для сравнения:

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

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

Сайт ggplot также является отличной ссылкой: http://had.co.nz/ggplot2/geom_bar.html

Смежные вопросы