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

ggplot2生成的环形图效果不符合预期,寻求解决方法

修正ggplot2环形图的实现问题

我来帮你搞定这个环形图的问题,你的代码有几个关键细节没处理好,导致效果不符合预期,下面一步步给你修正:

问题分析

  1. 极坐标方向错误:你用了coord_polar("y"),这会把y轴作为极坐标的角度,最终生成的是普通饼图而非环形图;要做环形(甜甜圈)图,需要把x设为固定值,再用coord_polar("x")转换。
  2. 文本标签位置未完善:你的geom_text里position参数没写完,无法让百分比标签正确显示在扇形中心。
  3. 缺少空心区域设置:没有调整x轴范围来留出环形中间的空心部分。

修正后的完整代码

首先加载所需包和数据(数据部分和你原来的一致):

library(ggplot2)
library(scales)

# 你的原始数据
Sex = c('Male', 'Female')
Number = c(125, 375)
df = data.frame(Sex, Number)
# 提前计算百分比,让代码更清晰
df$Percent = percent(df$Number / sum(df$Number))

然后是绘图代码:

ggplot(df, aes(x = 2, y = Number, fill = Sex)) +
  # 绘制条形,width控制环形的厚度
  geom_bar(stat = "identity", width = 1) +
  # 将x轴转换为极坐标角度,start=0让起始角度从正右方开始
  coord_polar("x", start = 0) +
  # 移除多余的坐标轴和背景
  theme_void() +
  # 图例放在顶部
  theme(legend.position = "top") +
  # 添加百分比标签,position_stack让标签居中,调整颜色和大小提升可读性
  geom_text(aes(label = Percent), 
            position = position_stack(vjust = 0.5),
            color = "white", size = 5) +
  # 调整x轴范围,生成中间的空心区域(数值差越大,空心越大)
  xlim(0.5, 2.5)

关键参数说明

  • x = 2:把所有数据映射到同一个x位置,这样极坐标转换后会形成环形结构
  • width = 1:控制条形的宽度,也就是环形的厚度,你可以根据需要调整这个值
  • position_stack(vjust = 0.5):让文本标签自动堆叠在每个扇形的中心位置,避免偏移
  • xlim(0.5, 2.5):通过缩小x轴的左侧范围,留出环形中间的空心,你可以修改这两个数值来调整空心大小

这样运行后就能得到符合预期的环形图,百分比标签清晰居中,样式干净整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:55