2015-01-23 2 views
0

У меня есть DataFrame с 117206 строк и 4 столбца userid, itemid, рейтинг и дата. Структура информационного блока приведена ниже.Гистограмма ggplot не отображает правильные результаты в r

'data.frame': 117206 obs. of 4 variables: 
$ userId: Factor w/ 19043 levels "1","2","3","4",..: 1 1 2 3 3 3 4 5 5 5 ... 
$ itemId: Factor w/ 11451 levels "2844","4936",..: 7402 9729 3404 2976 7932 10035 11093 6718 8297 8537 ... 
$ rating: int 7 8 10 8 8 7 10 2 7 5 ... 
$ time : Date, format: "2013-04-03" "2013-04-21" "2013-09-18" ... 

Глава данных

userId itemId rating  time 
1  1 1074638  7 2013-04-03 
2  1 1853728  8 2013-04-21 
3  2 113277  10 2013-09-18 
4  3 104257  8 2013-03-31 
5  3 1259521  8 2013-03-24 
6  3 1991245  7 2013-03-24 

Хвост данных

userId itemId rating  time 
117201 19041 2171867  3 2013-09-16 
117202 19041 2357129  5 2013-09-21 
117203 19041 2381931  4 2013-09-08 
117204 19042 816711  8 2013-06-23 
117205 19043 1559547  2 2013-07-08 
117206 19043 2415464  2 2013-07-14 

Я пытаюсь сделать гистограмму с помощью ggplot и не кажется, что это будет работать , Есть несколько проблем, которые изложены ниже:

  1. отсчета на осях у не являются правильными
  2. х-метки оси не отображается на всех

Я использую следующий код для рисования гистограммы, и я использовал тот же код, чтобы сделать правильный график для другого набора данных подобного типа, но со 100 К строк.

Сначала я создал ярлыки х-оси

labels_mtweet = seq(1,length(unique(m_tweet$itemId)),by=600) 

поэтому у меня есть этикетки от 1 до 11451.

ggplot(m_tweet)+geom_histogram(aes(x=itemId))+ 
    scale_x_discrete(breaks=labels_mtweet, labels=as.character(labels_mtweet))+ 
    labs(x="Movie Id", y = "Number of ratings per movie", 
     title = "Distribution of ratings per movie - MovieTweetings") 

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

plot(table(m_tweet$itemId),xlab=("Movie Id"),ylab=("Frequency of Movie Rating"), 
    main=("Distribution of Ratings per movie - MovieLens"),type="l") 

но при попытке сделать это с помощью ggplot. Строки не имеют правильной высоты, а x-метки вообще не отображаются.

Я хотел бы вставить ggplot здесь, но по политическим причинам я не могу. Может ли кто-нибудь определить, где все идет не так? Я думаю, что здесь что-то не хватает, что вызывает проблему.

Любая помощь будет принята с благодарностью. Я не предоставлял выход из «dput», поскольку он очень длинный.

Спасибо.

+1

Если вы хотите гистограмму, почему вы используете 'geom_bar', а не' geom_histogram'? – joran

+0

Я исправил ошибку, которая была ошибкой с моей стороны. – syebill

+0

. [Воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) будет полезно. Я не могу воспроизвести вашу ошибку. Пожалуйста, укажите пример ввода. – MrFlick

ответ

0

В соответствии мой комментарий ваш код (или мой вариант ниже) может в принципе работы, но не потому, что есть более чем 128 дискретных категорий ...

ggplot(m_tweet)+geom_histogram(aes(x=as.factor(itemId)))+ 
    scale_x_discrete(breaks=labels_mtweet, labels=as.character(labels_mtweet))+ 
    labs(x="Movie Id", y = "Number of ratings per movie", 
     title = "Distribution of ratings per movie - MovieTweetings") 

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

require(plyr) 
summarizedData <- ddply(m_tweet, c("itemId"), summarise,N = length(rating)) 

Тогда вы можете обойти, используя geom_histogram и сюжет отсчетов как geom_line по непрерывной оси х:

ggplot(summarizedData)+geom_line(aes(x=(itemId),y=N))+ 
    labs(x="Movie Id", y = "Number of ratings per movie", 
     title = "Distribution of ratings per movie - MovieTweetings") 

enter image description here

+0

Я использовал тот же код для 1682 дискретных x-категорий, и он работал, но я не знаю, почему он не работает в случае 11451 дискретных категорий. Он работал, когда я обобщал. – syebill