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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:40:37