R语言绘制金字塔密度图:X轴(年份)居中放置问题
修正后的金字塔密度图实现
你的原代码存在关键问题:全局映射的x = Year被后续geom_density中的x = Flowers和x = Candy覆盖,导致年份变量并未实际参与绘图。以下是满足需求的修正方案:
完整实现代码
library(tidyverse) # 读取数据 historical_spending <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2024/2024-02-13/historical_spending.csv') # 整理数据:保留所需变量 df <- historical_spending |> select(Year, Flowers, Candy) # 绘制金字塔密度图 ggplot(df) + # 绘制Flowers的密度(正向区域) geom_density(aes(x = Year, y = ..density.. * 100), fill = "blue", alpha = 0.5) + # 绘制Candy的密度(负向区域,添加偏移量增大间距) geom_density(aes(x = Year, y = -..density.. * 100 - 0.005), fill = "red", alpha = 0.5) + # 调整Y轴:标签取绝对值,适配偏移后的密度范围 scale_y_continuous( labels = abs, limits = c(-0.03, 0.03) ) + # 翻转坐标轴,让年份作为横向中间轴 coord_flip() + # 设置主题,将年份轴固定在图表中间 theme( axis.line.x = element_line(position = "middle"), axis.text.x = element_text(hjust = 0.5), panel.background = element_blank(), panel.grid = element_blank() ) + # 设置轴标签 labs(x = "年份", y = "密度")
关键调整说明
- 修复变量映射:将
geom_density的x参数设为Year,让年份真正作为轴变量参与绘图。 - 增大密度图间距:通过
..density.. * 100放大密度值,同时给Candy的密度添加-0.005的偏移量,直接拉开两个密度图的距离。 - 中间轴设置:使用
theme(axis.line.x = element_line(position = "middle"))将年份轴固定在Y轴零点位置,实现居中对齐效果。
内容的提问来源于stack exchange,提问作者HeyHeymath
相关产品推荐
相关产品推荐

