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

如何在ggplot2饼图外侧添加刻度与标注文本

解决ggplot2饼图外侧添加刻度与标注的问题

以下是调整后的代码,能实现你想要的外侧刻度+对应标注的效果:

library(ggplot2)
library(dplyr)

# 准备数据,计算每个类别的位置参数
cars <- data.frame(category = c("civic", "MG", "Suzuki", "Tesla"),
                   count = c(14810, 6457, 18233, 571),
                   percentage = c(37,16,46,1)) %>%
  arrange(desc(category)) %>% # 排序保证累积计算正确
  mutate(
    y_start = cumsum(lag(count, default = 0)), # 每个类别起始位置
    y_mid = y_start + count/2,                 # 每个类别中点位置(用于对齐刻度和标签)
    y_end = y_start + count                    # 每个类别结束位置
  )

ggplot(cars, aes(x = 1, y = count, fill = category)) +
  # 绘制饼图主体
  geom_bar(stat = "identity", width = 1, alpha = 0.5, color = "black") +
  # 绘制外侧径向刻度线
  geom_segment(aes(x = 1, xend = 1.1, y = y_mid, yend = y_mid), color = "black") +
  # 绘制外侧百分比标签
  geom_text(aes(x = 1.2, y = y_mid, label = paste0(percentage, "%")),
            size = 4.5, family = "serif", color = "black") +
  # 转换为极坐标(饼图)
  coord_polar("y", start = 0) +
  # 设置填充色(替换原无效的scale_color_gradientn)
  scale_fill_manual(values = rainbow(4)) +
  # 调整标签和图例
  labs(fill = "Category") +
  # 清理主题并调整图例位置
  theme_void() +
  theme(
    legend.position = "right",
    text = element_text(family = "serif", colour = "black")
  )

关键修改说明:

  • 数据预处理:通过dplyr计算每个类别的起始、中点位置,确保刻度和标签能精准对齐到每个扇形的中心线上
  • 替换标注方式:去掉ggrepel的自动偏移,改用固定x位置的geom_text,让标签稳定在刻度外侧
  • 添加刻度线:用geom_segment手动绘制径向短线,对应每个扇形的中线
  • 修正配色:把无效的scale_color_gradientn换成针对fill美学的scale_fill_manual,匹配饼图的填充色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:12:49