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

R语言如何使用ggplot将第二个直方图绘制在y轴负方向

ggplot2 双向直方图实现方案

核心逻辑:无需修改原始数据,仅需在绘制negvalues对应的直方图时,将统计得到的柱高(计数/密度)取负值,即可让柱子朝向y轴负方向绘制,微调坐标轴标签后就能达到预期效果。

修正后可直接运行的代码

library(ggplot2)
p_change <- ggplot(dx, aes(fill=Group)) +
  # 正向序列:柱子朝上,使用原始统计计数
  geom_histogram(aes(x=posvalues, y = after_stat(count)), binwidth=1, position = "identity") +
  # 负向序列:计数取反,柱子朝下落到y轴负区域
  geom_histogram(aes(x=negvalues, y = after_stat(-count)), binwidth=1, position = "identity") +
  # 坐标轴配置,保持原有范围,优化y轴刻度显示
  scale_x_continuous(name = "Number of tokens", limits = c(0, 15)) +
  scale_y_continuous(
    name = "Count",
    limits = c(-25, 25),
    # 负半轴刻度显示为正数值,避免阅读误解
    labels = ~abs(.)
  ) +
  # 可选:添加y=0基准分隔线,视觉层次更清晰
  geom_hline(yintercept = 0, linewidth = 0.5) +
  theme(
    legend.position = "right",
    text=element_text(size = 19)
  )
p_change

关键调整说明

  • 两个直方图层均显式指定y轴映射,避免默认统计值的方向错误
  • 新增position = "identity"参数,关闭直方图默认的堆叠位置调整,防止柱子错位
  • 替换原有的xlim()/ylim()为scale_*_continuous函数,支持自定义刻度标签:将负半轴刻度取绝对值显示,不会出现不符合计数逻辑的负号标签
  • 保留了你原有的所有主题、坐标轴范围、填充色映射配置,输出风格和原有绘图保持一致

版本适配提示

  • 如果你使用的ggplot2版本低于3.3.0(不支持after_stat语法),将代码中after_stat(count)替换为..count..、after_stat(-count)替换为-..count..即可正常运行
  • 如果需要绘制密度直方图而非计数直方图,只需将映射中的count替换为density,负向组同样对密度值取反即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:00:54