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
相关产品推荐
相关产品推荐

