ggplot直方图在r中没有显示正确的结果
ggplot histogram not displaying right results in r
我有一个包含 117206 行和 4 列 userid、itemid、rating 和日期的数据框。数据框的结构如下。
'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 制作直方图,但它似乎不起作用。有几个问题如下所述:
- y 轴上的计数不正确
- x 轴标签根本不显示
我正在使用以下代码绘制直方图,并且我使用相同的代码为具有 10 万行的类似类型的不同数据集绘制了正确的图。
首先我创建了 x 轴标签
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")
以上是我用来绘制直方图的代码。当我制作一个简单的图时,使用 table.
正确显示值
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' 的输出,因为它很长。
谢谢。
根据我的评论,您的代码(或下面我的变体)原则上可以工作,但不能工作,因为有超过 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")
考虑到离散比例的 x 值数量限制,我们无法让它工作。您可能需要考虑汇总您的数据,例如:
require(plyr)
summarizedData <- ddply(m_tweet, c("itemId"), summarise,N = length(rating))
然后您可以使用 geom_histogram 规避并在连续的 x 轴上将计数绘制为 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")
我有一个包含 117206 行和 4 列 userid、itemid、rating 和日期的数据框。数据框的结构如下。
'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 制作直方图,但它似乎不起作用。有几个问题如下所述:
- y 轴上的计数不正确
- x 轴标签根本不显示
我正在使用以下代码绘制直方图,并且我使用相同的代码为具有 10 万行的类似类型的不同数据集绘制了正确的图。
首先我创建了 x 轴标签
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")
以上是我用来绘制直方图的代码。当我制作一个简单的图时,使用 table.
正确显示值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' 的输出,因为它很长。
谢谢。
根据我的评论,您的代码(或下面我的变体)原则上可以工作,但不能工作,因为有超过 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")
考虑到离散比例的 x 值数量限制,我们无法让它工作。您可能需要考虑汇总您的数据,例如:
require(plyr)
summarizedData <- ddply(m_tweet, c("itemId"), summarise,N = length(rating))
然后您可以使用 geom_histogram 规避并在连续的 x 轴上将计数绘制为 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")