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

如何基于两个总和为条形总长的变量制作双色堆叠条形图?

制作双色堆叠条形图的解决方案

1. 完善数据集

先给现有子数据集新增FemaleGrossing字段,计算逻辑为总平均票房减去男性票房:

library(dplyr)

# 假设你的子数据集名为genre_data
genre_data <- genre_data %>%
  mutate(FemaleGrossing = meanGrossing - MaleGrossing)

2. 转换数据格式

ggplot2绘制堆叠条形图需要长格式数据,用tidyr工具完成转换:

library(tidyr)

long_format_data <- genre_data %>%
  select(Genre, MaleGrossing, FemaleGrossing) %>%
  pivot_longer(
    cols = -Genre,
    names_to = "GenderGroup",
    values_to = "GrossingValue"
  )

3. 绘制堆叠条形图

用ggplot2生成蓝粉双色堆叠图,X轴为电影类型,Y轴为平均总票房:

library(ggplot2)

ggplot(long_format_data, aes(x = Genre, y = GrossingValue, fill = GenderGroup)) +
  geom_bar(stat = "identity") +
  # 指定蓝粉配色对应男女票房
  scale_fill_manual(values = c("MaleGrossing" = "#1f77b4", "FemaleGrossing" = "#ff80ab")) +
  labs(title = "各类型电影男女票房占比", x = "电影类型", y = "平均总票房") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转X轴标签避免重叠

额外优化:简化初始数据集生成流程

你当前重复执行代码拼接的方式效率偏低,可以用批量处理逻辑生成完整子数据集:

# 假设raw_data中所有类型列都是二进制标识(如Animation=1代表该类型)
all_genres <- c("Animation", "Family", "Action") # 替换为你的18个类型列名

# 批量生成各类型汇总数据
genre_data <- purrr::map_dfr(all_genres, function(genre_name) {
  raw_data %>%
    filter(.data[[genre_name]] == 1) %>%
    summarise(
      Genre = genre_name,
      meanGrossing = mean(InflatedGross),
      meanBudget = mean(InflatedBudget),
      MaleGrossing = mean(Proportion_male) * meanGrossing
    )
})

# 新增女性票房字段
genre_data <- genre_data %>%
  mutate(FemaleGrossing = meanGrossing - MaleGrossing)

内容的提问来源于stack exchange,提问作者Rose Campos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:27