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

如何在R语言中绘制中间带有文本的双侧条形图?

在R中实现中间带文本的双侧条形图

完全可以用ggplot2实现这类双侧条形图,无需额外专用工具包,以下是具体实现方案:

步骤1:构造示例数据

先准备包含类别、左右两侧数值的数据集:

library(ggplot2)

# 模拟业务数据(替换为你的真实数据即可)
df <- data.frame(
  类别 = c("用户留存", "付费转化", "内容曝光", "活动参与"),
  左侧数值 = c(28, 42, 35, 58),
  右侧数值 = c(32, 26, 48, 22)
)

步骤2:ggplot2绘图实现

核心思路是将左侧数值转为负数,让条形向左延伸,右侧用正数向右延伸,中间添加类别文本,最后调整样式:

# 将左侧数值转为负数,用于绘制左向条形
df$左侧负数值 <- -df$左侧数值

ggplot(df, aes(y = 类别)) +
  # 绘制左侧条形
  geom_col(aes(x = 左侧负数值), fill = "#4A90E2", width = 0.8) +
  # 绘制右侧条形
  geom_col(aes(x = 右侧数值), fill = "#E24A4A", width = 0.8) +
  # 添加中间类别文本(替代y轴标签)
  geom_text(aes(x = 0, label = 类别), size = 5, fontface = "bold", color = "#333333") +
  # 添加左侧条形的数值标签
  geom_text(aes(x = 左侧负数值, label = abs(左侧负数值)),
            hjust = 1.3, color = "white", size = 4) +
  # 添加右侧条形的数值标签
  geom_text(aes(x = 右侧数值, label = 右侧数值),
            hjust = -0.3, color = "white", size = 4) +
  # 调整坐标轴与主题样式
  labs(x = NULL, y = NULL) +
  # 设置x轴范围,给标签留出空间
  xlim(-max(df$左侧数值)*1.3, max(df$右侧数值)*1.3) +
  theme(
    # 隐藏y轴刻度与文本(中间已有类别文本)
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    # 去除网格线与背景
    panel.grid = element_blank(),
    panel.background = element_blank(),
    # 调整x轴文本样式
    axis.text.x = element_text(size = 10)
  )

自定义调整说明

  • 若需要修改条形颜色,替换fill参数的十六进制颜色码即可
  • 调整条形宽度修改width参数
  • 数值标签的位置通过hjust参数微调(左标签hjust>1向右偏移,右标签hjust<0向左偏移)
  • 若你的参考图有其他样式(比如边框、背景色),可在theme中添加对应参数调整

关于专用工具包

目前没有专门针对这类双侧条形图的主流工具包,用ggplot2自定义已经足够灵活,能适配绝大多数场景需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:33:34