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

ggplot2环形柱状图:轴线条、文本背景及网格层级问题求助

环形柱状图复刻问题解决方案

目标

复刻指定环形柱状图

数据(修正语法错误后)

library(dplyr)
data <- data.frame(
  labels = c("A","B","C","D","E","F","G","H"),
  values = c(88, 61, 56, 77, 83, 63, 42, 60)
) %>%
  mutate(
    bar_color = case_when(
      values < 62 ~ "#ff7d48",
      values < 85 ~ "#76c5d0",
      values >= 85 ~ "#4b7d84"
    )
  )

现有代码问题修复及优化

以下是解决所有问题后的完整代码:

library(ggplot2)
library(dplyr)
library(ggtext) # 用于实现文本框背景

# 手动定义网格线位置
y_grid <- seq(20, 80, by = 20)
x_grid <- 1:nrow(data)

ggplot(data) +
  # 先画环形网格(y轴方向),置于底层
  geom_hline(yintercept = y_grid, linewidth = .8, color = "grey70") +
  # 再画径向网格(x轴方向),置于环形网格上方
  geom_vline(xintercept = x_grid + 0.5, linewidth = .8, color = "grey30") +
  # 绘制环形柱状图
  geom_bar(
    stat = "identity",
    aes(
      x = labels,
      y = values,
      fill = bar_color
    ),
    size = 1,
    color = "gray20",
    width = 1,
    alpha = 0.9
  ) +
  # 添加外圈灰色线条(替代无效的axis.line.x.top)
  annotate("path", 
           x = seq(0, 2*pi, length.out = 100), 
           y = max(data$values) + 3, # 略大于最大值,保证在外圈
           color = "grey30", 
           size = 1) +
  # 极坐标转换,调整起始角度让标签对齐柱子
  coord_polar(start = -pi/nrow(data)) +
  # 填充色映射
  scale_fill_identity() +
  # 调整y轴范围,给外圈线条和标签预留空间
  scale_y_continuous(limits = c(0, max(data$values) + 10)) +
  # 主题设置
  theme(
    axis.title = element_blank(),
    panel.background = element_blank(),
    axis.ticks.y = element_blank(),
    axis.text.y = element_blank(),
    # 用ggtext的文本框给x轴标签加白色背景
    axis.text.x = element_textbox_simple(
      fill = "white",
      color = "black",
      padding = margin(2, 4, 2, 4), # 调整文本与背景框的内边距
      lineheight = 1.2
    ),
    # 关闭默认网格,改用手动绘制的网格
    panel.grid = element_blank()
  )

问题逐一解决说明

  1. x轴顶部外圈线条:
    极坐标下axis.line.x.top不生效,改用annotate("path")绘制一个半径略大于数据最大值的圆形,模拟外圈线条,颜色设为grey30。

  2. x轴文本添加矩形背景:
    使用ggtext包的element_textbox_simple替代报错的element_textbox,它支持矢量化渲染,直接在theme(axis.text.x)中设置即可,通过padding参数调整文本与背景框的间距。

  3. 调整网格层顺序:
    关闭默认的panel.grid,手动用geom_hline先绘制环形网格(y方向),再用geom_vline绘制径向网格(x方向),让径向网格自动置于环形网格上方,无需依赖透明度区分。

内容的提问来源于stack exchange,提问作者isaid-hi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:47:34