首页 > 解决方案 > 如何使用 ggplot2 创建具有多个条形的直方图,其中每个数据观察值都是 0 或 1 选择?

问题描述

我是一个完整的 R 菜鸟,对我的一个家庭作业问题有点难过。以下是我尝试使用 ggplot2 创建的直方图类型:

!(https://imgur.com/a/EGKtr56

我有一个数据集,它指定了电影列表的发行期限、平均评级和评级年份。

我的数据集包括一个名为 rating.year 的列,其中每个数据样本都被分类为“2004”或“2005”,以及另一个名为“Release.period”的列,用于标记 X 轴。Y 轴是 2004 年和 2005 年上映的所有电影评分的平均值。我需要创建一个看起来与所示相同的直方图,其中红色条表示 2004 年评分的所有电影的平均评分,蓝色表示 2005 年评分的所有电影的平均评分。

所以我的问题是:使用 ggplot2,我如何计算各个年份的评分平均值并将其绘制到直方图上,以及如何创建两个单独的条形图,如模型直方图所示?

标签: rggplot2

解决方案


您可以将dplyr包用于summarise()您的数据:

library(ggplot2)
library(dplyr)

# create data
factors <- expand.grid(c(2004, 2005), c('1940-1960', '1960-1980', '1980-2000', '2000-2010'))
set.seed(42)
ratings <- runif(50, 2.5, 3.2)
data <- c()
for (i in 1:length(ratings)) {
  fact <- sample(1:nrow(factors), 1)
  data <- rbind(data, cbind(factors[fact, ], ratings[i]))
}
names(data) <- c('rating.year', 'Release.period', 'rating')
data$rating.year <- factor(data$rating.year)

# calculate the mean of ratings
data.sum <- data %>% group_by(rating.year, Release.period) %>% summarise(rating=mean(rating))

# plot the data
gg <- ggplot(aes(x=Release.period, y=rating, fill=rating.year), data=data.sum) + ylab('Mean of the Average Ratings')
# in geom_bar()
# stat='identity' will make the bars the height of your y-varible, i.e. rating
# position = 'dodge' will place bars with different fill next to each other
gg <- gg + geom_bar(stat='identity', width=0.5, position = 'dodge')
print(gg)

在此处输入图像描述


推荐阅读