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

R语言ggplot绘制堆叠条形图出现显示异常问题求助

R ggplot2堆叠条形图异常问题修复方案

三个异常的核心诱因:

  • y轴数值挤压、填充占比显示错误:minutes列在构造时被定义为字符型(所有数值加了双引号),R无法将其识别为连续数值做柱高映射,仅按离散文本处理,最终出现高度错乱、占比失真的问题。
  • 横轴星期乱序:R对文本类分类变量默认按字母顺序排序,不会自动识别星期的时间先后逻辑,因此会出现不符合日常认知的乱序。

修复步骤

  1. 加载ggplot2包(运行绘图代码前需先加载包,否则会报错)
  2. 数据类型修正:将minutes列从字符型转换为数值型,让ggplot可以正确识别数值大小映射柱高
  3. 分类顺序修正:将weekday列转换为有序因子,手动指定星期的排列顺序,固定横轴展示逻辑
  4. 执行原有绘图代码即可得到正确的堆叠条形图

完整修正后代码

# 加载绘图包
library(ggplot2)

# 原始数据构造
activity <- c("mean_fairly_active", "mean_fairly_active", "mean_fairly_active",
              "mean_fairly_active", "mean_fairly_active", "mean_fairly_active",
              "mean_fairly_active", "mean_lightly_active", "mean_lightly_active",
              "mean_lightly_active", "mean_lightly_active", "mean_lightly_active",
              "mean_lightly_active", "mean_lightly_active", "mean_very_active",
              "mean_very_active", "mean_very_active", "mean_very_active",
              "mean_very_active", "mean_very_active", "mean_very_active",
              "mean_sedentary", "mean_sedentary", "mean_sedentary", 
              "mean_sedentary", "mean_sedentary", "mean_sedentary",
              "mean_sedentary")
minutes <- c("14.3", "13.1", "12.0", "12.1", "15.2", "14.5", "14.0", "197", "190",
             "185", "204", "207", "174", "192", "23.0", "20.8", "19.4", "20.1", 
             "21.9", "20.0", "23.1", "1007", "989", "962", "1000", "964", "990", 
             "1028")
weekday <- c("Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun", "Mon", 
             "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun", "Mon", "Tues", "Wed",
             "Thurs", "Fri", "Sat", "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri",
             "Sat")
merged_means <- data.frame (activity, minutes, weekday)

# 数据修复逻辑
# 1. 转换分钟列为数值类型
merged_means$minutes <- as.numeric(merged_means$minutes)
# 2. 固定星期横轴的排序
merged_means$weekday <- factor(merged_means$weekday, 
                               levels = c("Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"))

# 绘图
ggplot(merged_means, aes(x=weekday, y=minutes, fill=activity)) +
  geom_bar(stat = "identity")

可选优化:如果需要调整填充色块的堆叠顺序,可以将activity列也转换为有序因子,按你需要的层次指定levels即可,比如按活动强度从低到高设置为c("mean_sedentary", "mean_lightly_active", "mean_fairly_active", "mean_very_active"),展示逻辑会更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:36:27