You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:32:54