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

在R中用ggplot绘制按年份分组的水平李克特图

按年份分组的水平李克特图绘制方案

实现步骤

要完成需求,需先对数据做分组统计(计算各年份内A类别的占比),再用ggplot2绘制水平堆叠条形图(即水平李克特图),并指定自定义颜色映射。

完整代码

# 加载依赖包
library(dplyr)
library(ggplot2)

# 生成示例数据
set.seed(123)
A <- sample(1:5, 1000, replace = TRUE)
year <- sample(c(2019, 2020, 2021, 2022), 1000, replace = TRUE)
df <- data.frame(A, year)

# 数据预处理:计算各年份内A类别的百分比
df_summary <- df %>%
  group_by(year, A) %>%
  summarise(count = n(), .groups = "drop") %>%
  group_by(year) %>%
  mutate(percent = count / sum(count) * 100) %>%
  ungroup() %>%
  mutate(A = factor(A, levels = 1:5)) # 转为因子保证类别顺序正确

# 绘制水平李克特图
ggplot(df_summary, aes(x = year, y = percent, fill = A)) +
  geom_col(position = "stack") + # 堆叠条形展示占比
  coord_flip() + # 转为水平方向
  # 自定义颜色映射
  scale_fill_manual(values = c(
    "1" = "red", 
    "2" = "lightcoral", 
    "3" = "blue", 
    "4" = "lightgreen", 
    "5" = "green"
  )) +
  # 添加百分比标签(可选,提升可读性)
  geom_text(aes(label = sprintf("%.1f%%", percent)), 
            position = position_stack(vjust = 0.5), size = 3) +
  # 调整坐标轴与标题
  labs(x = "年份", y = "百分比", fill = "类别A") +
  theme_minimal()

代码说明

  • 数据处理:通过dplyr分组统计,先计算每个年份+A类别的频数,再转换为对应年份内的占比;将A转为因子是为了确保绘图时类别按1-5的顺序展示。
  • 绘图细节:
    • geom_col(position = "stack") 创建堆叠条形图,直观展示各分类的占比分布。
    • coord_flip() 将垂直条形转为水平,符合李克特图的水平展示需求。
    • scale_fill_manual() 严格按照要求指定每个A类别的颜色。
    • 可选的geom_text() 为每个堆叠块添加百分比标签,让数据更直观。

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:37:05