使用R的ggplot2movies绘制1990-2005年六大电影类型产量折线图报错求助
解决ggplot2movies绘制年度电影产量折线图的报错与代码修正
问题根源
原代码的核心错误有两处:
- 类型筛选逻辑错误:用
Action ==1, Comedy == 1,...要求电影同时属于所有6种类型,这类电影几乎不存在,导致filtered_movies是空数据集,后续创建tibble时列尺寸不匹配触发报错。 - 数据结构处理混乱:未将宽格式的类型列转换为适合分组统计的长格式,绘图时的映射逻辑也不符合ggplot的要求。
修正后的完整代码
library(ggplot2movies) library(tidyverse) # 加载dplyr和tidyr用于数据处理 # 加载数据集 data(movies) # 1. 筛选1990-2005年、且属于6种目标类型之一的电影 filtered_movies <- movies %>% filter(year >= 1990 & year <= 2005) %>% # 标记是否属于目标类型中的任意一种 mutate(has_target_genre = Action + Comedy + Romance + Drama + Documentary + Animation >= 1) %>% filter(has_target_genre) %>% # 仅保留年份和6种类型列 select(year, Action, Comedy, Romance, Drama, Documentary, Animation) # 2. 把宽格式数据转为长格式,方便分组统计 long_movies <- filtered_movies %>% pivot_longer(cols = -year, names_to = "genre", values_to = "is_genre") %>% filter(is_genre == 1) # 只保留实际属于该类型的记录 # 3. 统计每年每个类型的电影产量 genre_year_count <- long_movies %>% group_by(year, genre) %>% summarise(count = n(), .groups = "drop") # 4. 绘制多曲线折线图 plot <- ggplot(genre_year_count, aes(x = year, y = count, color = genre, group = genre)) + geom_line(linewidth = 1) + labs(title = "1990-2005年各类型电影年度产量", x = "年份", y = "电影数量", color = "电影类型") + theme_minimal() # 显示图形 print(plot)
关键修正说明
- 筛选逻辑调整:不再要求电影同时满足所有类型,而是只要属于6种类型中的任意一种就保留,用类型列求和的方式判断是否符合条件。
- 宽转长格式处理:通过
pivot_longer把每个类型列转为单独的行,这是ggplot绘制多分组曲线的标准数据格式,能让分组统计和绘图映射更清晰。 - 明确统计产量:用
group_by+summarise直接计算每年每个类型的电影数量,避免使用stat="count"可能带来的逻辑混乱。 - 绘图映射优化:将
y轴绑定到统计好的产量count,color和group都关联到genre,确保每个类型的折线独立显示并正确区分颜色。
内容的提问来源于stack exchange,提问作者user22469461
相关产品推荐
相关产品推荐

