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

R语言使用ggplot2绘制双列并列柱状图不显示第二列问题

问题原因

  • 你当前使用的是宽表数据,population和household是两个独立的数值列,没有被映射为同一个分类维度下的不同分组,因此position="dodge"找不到需要并列展示的分组对象
  • 你错误地将连续型的人口数值转为因子类型赋值给Y轴,同时将household的数值转为因子作为填充映射,不符合ggplot分组绘图的逻辑要求

修正后的可运行代码

# 构造初始数据
population <- c(894, 15736, 42147)
household <- c(215, 4357, 13622)
year <- c(2000, 2010, 2020)
df <- data.frame(year, population, household)

# 加载所需包
library(ggplot2)
library(tidyr)

# 将宽表转为长表,适配ggplot绘图逻辑
df_long <- pivot_longer(df, 
                        cols = c(population, household),
                        names_to = "类别",
                        values_to = "数值")

# 绘制并列柱状图
pl <- ggplot(df_long, aes(x = factor(year), y = 数值, fill = 类别))
pl2 <- pl + 
  geom_col(position = position_dodge(width = 0.9), width = 0.8) + 
  labs(x = "年份", y = "数值", fill = "指标类别")

print(pl2)

调整说明

  • 通过pivot_longer将两个指标列合并为一个分类维度,作为fill的映射对象,ggplot才能识别到需要并列展示的两个分组
  • Y轴直接使用连续数值类型,保证刻度展示正确
  • 使用position_dodge()显式设置并列宽度,避免柱形重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:18:04