如何让ggplot半圆饼图沿X轴放置并添加扇区百分比标签
解决半圆饼图的两个问题
1. 让图表沿X轴铺满绘图区域(消除悬浮)
原代码里geom_rect的xmin=1, xmax=2会生成环形半圆,再加上xlim(c(0,2))和ylim(c(0,2))的设置,导致图表悬浮在中间。调整方案:
- 将
geom_rect的xmin设为0,xmax设为1,生成实心半圆 - 把
xlim改为c(0,1),ylim改为c(0,1),匹配数据的实际范围
2. 在扇区内添加百分比标签
先计算每个扇区的中心角度位置(即(ymin + ymax)/2),再用geom_text在极坐标下添加标签:
- 新增计算:
y_mid <- (ymin + ymax)/2,得到每个扇区的中心位置 - 使用
geom_text,设置x为0.5(半圆半径的中间位置),y为y_mid,label为格式化后的百分比文本
修改后的完整代码
# 计算边界和扇区中心位置 ymax <- cumsum(data_extract$fract) ymin <- c(0, head(ymax, n= -1)) y_mid <- (ymin + ymax)/2 ggplot(data_extract, aes(fill = Option, ymax = ymax, ymin = ymin, xmax = 1, xmin = 0)) + geom_rect() + # 添加百分比标签 geom_text(aes(x = 0.5, y = y_mid, label = paste0(Perc, "%")), color = "white", fontface = "bold") + coord_polar(theta = "y", start = -pi/2) + xlim(c(0, 1)) + ylim(c(0, 1)) + theme_classic() + theme( legend.position = "bottom", axis.title = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), line = element_blank()) + labs(fill = "Key")
关键修改说明
- 消除悬浮:把矩形的x范围从[1,2]调整为[0,1],同时匹配xlim/ylim的范围,让半圆从绘图区左边缘开始,完全贴合X轴
- 添加标签:通过
y_mid定位每个扇区的中心,用geom_text在极坐标下放置标签,白色加粗文字能更好地和扇区颜色区分
内容的提问来源于stack exchange,提问作者Alokin
相关产品推荐
相关产品推荐

